关于scanf的探索
HDU2008数值统计
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 125294 Accepted Submission(s): 60151
Problem Description
统计给定的n个数中,负数、零和正数的个数。
Input
输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
Output
对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。
Sample Input
6 0 1 2 3 -1 0
5 1 2 3 4 0.5
0
Sample Output
1 2 3
0 0 5
Time Limit Exceeded的代码:
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
//if(n==0)break;
int f=0,l=0,z=0;
while(n--){
float x;
scanf("%f",&x);
if(x<0)f++;
else if(x>0)z++;
else l++;
}
printf("%d %d %d\n",f,l,z);
}
return 0;
}
scanf()探究:
1.整数输入:
int m;
int k=scanf(“%d”,&m);
输入一个负数,0或整数,scanf()的返回值k=1.
int m,n;
int k=scanf(“%d %d”,&m,&n);
输入两个负数,0或整数,scanf()的返回值k=2
2.浮点数输入:同理
3.字符输入:char m;
输入一个字符(如果输入数字5,也是这样,因为5也算是一个字符),scanf()的返回值k=1.
char m,n;
int k=scanf(“%c %c”,&m,&n);
输入一个字符(如果输入数字5,也是这样,因为5也算是一个字符),scanf()的返回值k=2.
4.混合输入A型
int m,n;
int k=scanf(“%d %d”,&m,&n);
输入1和d,scanf()的返回值k=1
int m,n,p;
int k=scanf(“%d %d %d”,&m,&n,&p);
输入1,d和1,scanf()的返回值k=1。
5.混合输入B型
char m,n;
int k=scanf(“%c %c”,&m,&n);
输入d和1还是1和d,scanf()的返回值k=2。
其实,数字1也算是一个字符。
上一篇: 常见查找、排序算法的实现
下一篇: finally简单总结