第三章

   第三章习题

/*
分数统计
  输入一些学生的分数,哪个分数出现的次数最多?如果有多个并列,从小到大输出。
  任务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 }

 

/*

后续

*/

转载于:https://www.cnblogs.com/X-Spider/p/3528909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值