第3题:
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M
的格式在一行中输出该位数字 D
及其在 N 中出现的次数 M
。要求按 D
的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
易错点:不超过 1000 位的正整数 N
因此使用string类型,最后将字符型转换为数字即可。使用long long 有一个数据无法通过
void Count(string n)
{
int a[10] = { 0 };
for (int i = 0; i < n.length(); i++)
{
a[n[i] - 48]++;
}
for (int i = 0; i < 10; i++)
{
if (a[i] != 0)
cout << i << ':' << a[i] << endl;
}
}
第8题:
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X
的格式输出全部数字的和X
。
输入样例:
-3 8
输出样例:
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
需要注意的点:每个数字占5个字符宽度,向右对齐
//解决方法如图:
//第一种
#include<iomanip> //头文件
cout<<setiosflags(ios::right)<<setw(5)<<i; //代码
//第二种
printf("%5d",i);
出现的错误:第二个测试点格式错误,自己运行0 4测试就知道问题了
需加入以下代码,b-i>=1,用以判断换行后是否还有数字,没有则不换行
if (t%5==0&&b-i>=1)
cout << endl;