第三章习题
/*
分数统计
输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。
任务1:分数均为不超过100的非负整数
任务2:分数均为不超过100的非负实数,但最多保留两位小数。
*/
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 #define MAXN 100 5 int main() 6 { 7 int a[MAXN],i,j,len = 0,most[MAXN] = {0},b[MAXN],tmp,k; 8 while(cin >> a[len] && len < MAXN) len ++; //输入 9 for(i = 0;i < len && (a[i] > 0);i ++) 10 {//most数组为a【i】之后a【i】出现的数量 11 for(j = i;j < len;j ++) 12 if(a[i] == a[j]) 13 most[i] ++; 14 } 15 int max = 0; 16 for(i = 0;i < len;i ++) 17 if(most[i] > max) 18 max = most[i];//max为出现次数最多的数量 19 j = 0; 20 for(i = 0;i < len;i ++) 21 if(most[i] == max) 22 {//此循环将出现次数最多的分数存入b数组 23 b[j] = a[i]; 24 j ++; 25 } 26 for(i = 0;i < j;i ++) 27 for(k = i;k < j;k ++) 28 if(b[i] < b[k]) 29 {//排序b数组 30 tmp = b[i]; 31 b[i] = b[k]; 32 b[k] = tmp; 33 } 34 for(i = 0;i < j;i ++) 35 cout << b[i] << " ";//输出 36 cout << endl; 37 38 return 0; 39 }
/*
单词的长度
输入若干个单词,输出它们的平均长度。单词只包含大写字母和小写字母,用一个或多个空格隔开
*/
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #define MAXN 10000 5 using namespace std; 6 int main() 7 { 8 char c[MAXN]; 9 int i = 0,j = 0,k = 0,num = 0,sum = 0; 10 fgets(c,sizeof(c),stdin); 11 while(i < strlen(c)) 12 { 13 while(c[i] == 32) 14 i ++; 15 num ++; 16 if(c[i] != 32) 17 { 18 for(j = i,k = 0;c[j] != 32 && c[j] != 10;j ++) 19 k ++; 20 sum += k; 21 } 22 i = j + 1; 23 } 24 cout << (double)sum/num << endl; 25 return 0; 26 }
/*
输入若干个整数(可以是正数,负数或者零),输出它们的乘积的末3位。这些整数中会混入一些由大写字母组成的字符串,你的程序应当忽略它们。提示:试试看,在执行scanf("%d")时输入一个字符串会怎样?
*/
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cmath> 5 #define MAXN 100 6 using namespace std; 7 int main() 8 { 9 char a[MAXN],b[MAXN] = {‘\0‘}; 10 int i = 0,j = 0,k,l,h = 0,mutiply = 1; 11 int mut[MAXN] = {0}; 12 int num = 0,page = 0; 13 fgets(a,sizeof(a),stdin);//输入 14 while(a[i] != 10) 15 { 16 if(a[i] < 65 || a[i] > 90) 17 {//将输入的字符串移动到b数组且排除掉所有大写字母 18 b[j] = a[i]; 19 i ++; 20 j ++; 21 } 22 else 23 i ++; 24 } 25 b[j] = ‘\0‘; 26 for(i = 0,l = 0;i < strlen(b) && l < 10;i += j + 1,l ++) 27 {//i为数组每个数字起始位置 28 for(j = 0;b[j + i] != 32 && b[j + i] != 0;j ++);//j大小为每个数字的位数 29 for(k = 0;k < j;k ++) 30 {//k遍历数字里的每个单位数 31 num = b[j - k + i - 1] - 48;//将字符数字变为整形数字 32 num *= pow(10,k); 33 page += num;//将单个数字组合 34 } 35 mut[l] = page;//每个组合好的数字赋给整形数组 36 page = 0;//置0 37 } 38 for(i = 0;i < l;i ++) 39 mutiply *= mut[i];//得到数字乘好后的最终结果 40 cout << mutiply /100 % 10 << mutiply / 10 % 10 << mutiply % 10 << endl;//输出 41 42 return 0; 43 }
/*
后续
*/