本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。
函数接口定义:
int Count_Digit ( const int N, const int D );
其中N
和D
都是用户传入的参数。N
的值不超过int
的范围;D
是[0, 9]区间内的个位数。函数须返回N
中D
出现的次数。
裁判测试程序样例:
#include <stdio.h>
int Count_Digit ( const int N, const int D );
int main()
{
int N, D;
scanf("%d %d", &N, &D);
printf("%d\n", Count_Digit(N, D));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
-21252 2
输出样例:
3
第一次的代码
int Count_Digit ( const int N, const int D )
{
int a[10]={0},y,x;
if(N<0)x=-N;
else x=N;
while(x)
{
y=x%10;
x/=10;
a[y]++;
}
if(D==0&&x==0)
{
return 1;
}
return a[D];
}
结果是错的
因为顺序有问题,x在经历循环过后,x一定变成了0,所以x==0这一条件是恒成立的,也就是说只要D==0,它就一定会返回1 例子:100 0 输出的是1 于是最后一个点就卡住了
只要把顺序改一下就好了
int Count_Digit ( const int N, const int D )
{
int a[10]={0},y,x;
if(N<0)x=-N;
else x=N;
if(D==0&&x==0)
{
return 1;
}
while(x)
{
y=x%10;
x/=10;
a[y]++;
}
return a[D];
}
这就让我想起来翁恺老师痛苦的并行实验了,我改了快排的并行算法好几天,试了好几个版本,结果都不行,最后发现是pivot的赋值赋早了。。。。。~~~~~~
所以说顺序是很重要的吖~~~特殊情况最好先考虑,循环的话顺序一定一定要按照逻辑来,不能先放完初始化、特殊情况
就想了这么多,有其他的情况再补充吧