第一部分:枚举
在给定的范围内逐个检查是否符合条件。
例题zstu 3831
Description
输出所有形如aabb的四位完全平方数(即前2位数字相等,后2位数字相等,且是另外一个数的平方)
Input
没有输入
Output
按照从小到大输出4位完全平方数
枚举也是需要方法的,虽然可以从1000开始到9999逐个检查,但是这样效率不高,注意到四位数中只有两种数字,所以只需定义i,j两个变量即可。
代码: //zstu 3831
#include
} } return 0; }
int judge(int n){ }
if(first!=0)printf(\printf(\first++;
int i=(int)sqrt(n);//(int)表示强制转换数据类型,在这里是舍去小数部分 if(i*i==n)return 1; return 0;
例2 zstu 4006
Description
求含有数字a且不能被a整除的4位整数的个数,并求这些整数的和
Input
多组测试数据,先输入整数T表示组数 然后每组输入1个整数a(1<=a<=9)
Output
对于每组测试数据输出一行,每行2个数分别是个数与和
Sample Input
1 3
Sample Output
思路类似上一题,但是稍麻烦点。这题应该需要从1000到9999进行查找,因为虽然有一个a了,但是含有几个a不确定,分开讨论更麻烦。
代码:
#include
int main(){
int judge(inta,int n);//定义判断函数,判断a是否是n中的一个数 intT,a,i;
scanf(\测试组数T while(T--) {
int sum=0,count=0;//初始化个数与和为0,避免累加上组的结果 scanf(\
for(i=1000;i<=9999;i++){
if(judge(a,i)==1&&i%a!=0){//满足两个条件 count++; sum+=i; } } printf(\ } return 0; }
int judge(inta,int n){ for(;n!=0;n/=10)//每次取n的个位数,之后将n除以10,即向右移一位 if(n==a)return 1;//函数在运行return语句之后就会结束,即使之后还有语句也不会执行 return 0; }
练习zstu 3512 3572 2429
第二部分数组(int,float,double等数字类的,char之后再说) 数组的操作一般分为排序,查找,删除。下面各取一道例题。 例1 排序 zstu 3540
Description
输入一个正整数N和N个整数,将它们按从大到小的顺序进行排序后输出。
Input
多组测试数据,每组输入一个正整数N(1≤N≤100)和N个整数,用空格分隔。
Output
将这N个数按从大到小的顺序重新输出。
Sample Input
10 -4 5 12 88 23 -9 2 0 8 10 5 12 3 4 9 -2
Sample Output
88 23 12 10 8 5 2 0 -4 -9 12 9 4 3 -2
下面给出两种方法 方法1:自定义函数 //zstu 3540
#include void dsort(int *a,int n){//冒泡排序指针加上[k]可访问其本身地址之后的 k个元素 inti,j,t; for(i=0;i #include #include //算法头文件 using namespace std;//使用std命名空间 boolcmp(inta,int b){//比较函数,如果不写的话,默认升序排序,并且调用函数的时候要这么写sort(a,a+n); return a>b;//这边的形态就是排完序之后前一个元素与后一个元素的大小关系 } int main(){ intn,a[101],i; while(~scanf(\ for(i=0;i 例2,查找 Zstu 3883 Description 在给定的数组中查找一个数 Input 多组测试,每组第一行输入1个整数n(n<20),然后是n个整数 第二行输入1个整数m Output 查找在第一行的n个整数中第一次出现数字m的下标位置并输出,如果没有找到则输出No Sample Input 3 4 5 6 5 4 2 2 2 2