题目:统计满足条件的4位数
【题目描述】
给定若干个四位数,求出其中满足以下条件的数的个数:个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零。
【输入】
输入为两行,第一行为四位数的个数n,第二行为n个的四位数。(n≤100)
【输出】
输出为一行,包含一个整数,表示满足条件的四位数的个数。
【输入样例】
5
1234 1349 6119 2123 5017
【输出样例】
3
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{char a,b,c,d;
int n,y=0;
cin>>n;
for(int i=1;i<=n;i++)
{scanf("%c%c%c%c",&a,&b,&c,&d);
if((d-a-b-c)>0)
y++;
}
cout<<y<<endl;
return 0;
}
请问哪里出错了?运行时答案错误
因为字符有ASCII码的原因,字符的实际数值是原数字加上48。
修改方法:1. 把a,b,c,d设成int型;2. 把d-a-b-c变成(d-48)-(a-48)-(b-48)-(c-48)。
还有就是u013434984说的,把cin和scanf统一。
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int num[50],count=0,i,n;
int a,b,c,d;
printf("请输入四位数个数");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&num[i]);
if((num[i]%10-num[i]/1000-num[i]/100%10-num[i]/10%10)>0){
count++;
}
}
printf("%d",count);
return 0;
}
不要混合使用cin和scanf
你这样,n是5,但是scanf会从换行开始读起,所以你的输入数为
最终结果为0也就不奇怪了。
既然用cpp最好就统一用cin >> a >> b >> c >> d;