08-1. 求一批整数中出现最多的个位数字(20)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

3
1234 2345 3456

输出样例:

3: 3 4
 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5     int n;                             //输入n个数
 6     scanf("%d", &n);
 7
 8     int i, a[n], b[10] = {0};
 9     for(i = 0 ; i < n ; i++) {
10         scanf("%d", &a[i]);            //将n个数存放到a数组中
11         while(a[i] != 0) {
12             b[a[i] % 10]++;            //a[i]的个位数当作b数组的下标
13             a[i] /= 10;                //去掉a[i] 的个位数
14         }                              //a[i]的 各个位数(个位,百位...)都存放在b 数组的下标 ,并且记录下它出现的个数
15     }                                  //n 个数字都遍历完
16     int t = 0;
17     for(i = 0 ; i < 10 ; i++) {        //b[i]表示数字 i 出现的次数
18         if(t < b[i]) {
19             t = b[i];                  //找到b[i]的最大值
20         }
21     }
22     printf("%d: ", t);                 //按格式输出前面部分
23     int c[10] = {-1}, cnt = 0;
24     for(i = 0 ; i < 10 ; i++) {        //遍历b[i]数组
25         if(b[i] == t) {                //找到b[i]的所有最大值 (出现最多次数)
26             c[i] = i;                  //并将最大值的下标存放到c 数组中(下标对应相等 )
27             cnt++;                     //并记录有多少最大值
28         }
29     }
30     int cnt2 = 0;
31     for(i = 0; i < 10; i++) {          //遍历c 数组
32         if(c[i] == i) {                //找到最大值下标 (出现最多次数的数字)
33             printf("%d", i);           //并输出
34             cnt2++;
35             if(cnt2 < cnt) {
36                 printf(" ");
37             }
38         }
39     }
40
41     return 0;
42 }

08-1. 求一批整数中出现最多的个位数字(20)

时间: 2024-08-01 03:42:20

08-1. 求一批整数中出现最多的个位数字(20)的相关文章

数组-07. 求一批整数中出现最多的个位数字(20)

1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int i,n,a[1000],c[10]={0},max=0; 5 cin>>n; 6 for(i=0;i<n;++i) 7 cin>>a[i]; 8 for(i=0;i<n;++i) 9 while(a[i]){ 10 c[a[i]%10]++; 11 a[i]/=10; 12 } 13 for(i=0;i<10;++i) 14

数组-07. 求一批整数中出现最多的个位数字

数组-07. 求一批整数中出现最多的个位数字(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字.例如给定3个整数1234.2345.3456,其中出现最多次数的数字是3和4,均出现了3次. 输入格式: 输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔. 输出格式: 在一行中按格式“M:

习题7-2 求一批整数中出现最多的个位数字

1 #include<stdio.h> 2 3 int main(void) 4 { 5 int n; 6 int number[1000]; 7 int digit[10] = {0}; //记录每个数字出现的次数 8 int temp; 9 10 scanf_s("%d", &n); 11 for (int i = 0; i < n; i++) 12 { 13 scanf_s("%d", &number[i]); 14 } 15

PTA-----求一批整数中出现最多的个位数字

#include <stdio.h> int main() { int n,i; int arr[10]={0}; int max = 0; scanf("%d", &n); for (i=0; i<n; i++) { int a; scanf("%d ", &a); if(a == 0) //一定要考虑0的情况,注意细节 { arr[0]++; //[]的优先级高于++ } while (a > 0) { arr[a%10]

求出整数中1的个数

输入一个整数,求出它的二进制1的个数.考虑的知识点:负数怎么求,因为计算机中存放都是补码的形式存储一个数.因为正数的源码,反码,补码都是一样,不用考虑.但是负数就要考虑了,比如-0,它的源码应该是10000000 00000000 00000000 000000000 00000000,所以负数要考虑. 下面是代码实现: #ifndef _FINDNUMBEROF1_ #define _FINDNUMBEROF1_ /*================================ Macro

高效求一个整数中1的位数

求一个整数中0或1的位数,有很多方法可以使用除法,求余等方法,也可以使用位运算,相比前者效率更高. #include <stdio.h> #include <stdlib.h> //求一个整数 1的位数 int count0(int x) { int num=0; while(x) { num+=x%2; x/=2; } return num; } int count1(int x) { int num=0; while(x) { num+=(x&0x01); x>&

求一个整数中二进制1的个数

题目:求一个整数二进制表示1的个数 第一版: 思路:如果一个整数与1做与运算,结果为1,那么该整数最右边一位是1,否则是0: int NumberOf1(int n) { int count = 0; while (n) { if (n&1)//如果一个整数与1做与运算的结果是1,表示该整数最右边是1,否则是0: { count++; } n = n>>1; } return count; } 缺点:因为代码当中有右移,当是负数的时候,要考虑符号位:如果一个正数,右移之后在最左边补n个

求一个字符串中出现最多的字符和次数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> var str = "zhaochucichuzuiduodezifu"; var json = {}; for (var i = 0; i < str.length;

求N个数中的第二大的数字

核心代码: max1=0;//存最大max2=0; //存次大:仅是算法,暂考虑非负值.if(x>max1){    max2=max1;max1=x;}elseif(max1>x and x>max2){    max2=x;}