蓝桥试题测试---查找整数(scanf流问题)
2016-11-26 11:43
323 查看
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
这个题目的实现是非常简单的,但是这道题涉及到了我一个薄弱的知识点:scanf流。根据题目中的样例输入可知,第一次我们需要输入数字的个数,第二次我们需要输入每个数字,第三次输入目标值。由于数字的个数是不确定的,所以在第二次输入的时候不可能采用scnaf("%d%d%d...",&a,&b,&c...)这种格式。所以我就想用这种方法实现:
while(count--)
{
scanf("%d",&array[num++]);
} 当我把这行代码写完之后,我突然意识到了一个问题,这样结合while()循环的方式来输入,岂不是每输入一次数字都要按一下回车?这样数字输入完成之后,数字的格式不是一横行,而是一竖列,这样是不符合题目的要求的。我想死马当活马医吧,在第二次输入当中,我大胆采用每次输入一个数字后不按回车,而按空格。如下:
第一行的5代表数字的个数,第二行的五个数字表示我输入的格式采用空格隔开,输入目标数字5。我惊讶的发现,输出结果竟然正确!
我C语言基础并不是很好,绞尽脑汁想不明白这是为什么。在百度上查阅了关于scanf资料,了解了其中的原因。当我采用空格隔开的方式输入数字时候,这五个数字会先缓存到scanf流当中,scanf在进行第一次扫描后,首先扫描到了数字1,接下来遇到了空格,这个时候会停止扫描,停止扫描之后由于while()循环的作用,scanf马上会循环进入第二次扫描,扫描到数字2之后又遇到了空格,停止扫描,这时候循环后进入第三次扫描,以此类推,由于while(count--)的限制,scanf会扫描五次后结束。这就是原因所在。接下来贴出完整代码:
#include<stdio.h>
#define MAXN 10000+10
int array[MAXN];
int main()
{
int count,i,m;
int num=0;
int temp=-1;
int target;
scanf("%d",&count);
while(count--)
scanf("%d",&array[num++]);
scanf("%d",&target);
for(i=0;i<num;i++)
{
if(array[i]==target)
{
printf("%d",i+1);
break;
}
}
if(i==num)
printf("%d",temp);
return 0;
}
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
这个题目的实现是非常简单的,但是这道题涉及到了我一个薄弱的知识点:scanf流。根据题目中的样例输入可知,第一次我们需要输入数字的个数,第二次我们需要输入每个数字,第三次输入目标值。由于数字的个数是不确定的,所以在第二次输入的时候不可能采用scnaf("%d%d%d...",&a,&b,&c...)这种格式。所以我就想用这种方法实现:
while(count--)
{
scanf("%d",&array[num++]);
} 当我把这行代码写完之后,我突然意识到了一个问题,这样结合while()循环的方式来输入,岂不是每输入一次数字都要按一下回车?这样数字输入完成之后,数字的格式不是一横行,而是一竖列,这样是不符合题目的要求的。我想死马当活马医吧,在第二次输入当中,我大胆采用每次输入一个数字后不按回车,而按空格。如下:
第一行的5代表数字的个数,第二行的五个数字表示我输入的格式采用空格隔开,输入目标数字5。我惊讶的发现,输出结果竟然正确!
我C语言基础并不是很好,绞尽脑汁想不明白这是为什么。在百度上查阅了关于scanf资料,了解了其中的原因。当我采用空格隔开的方式输入数字时候,这五个数字会先缓存到scanf流当中,scanf在进行第一次扫描后,首先扫描到了数字1,接下来遇到了空格,这个时候会停止扫描,停止扫描之后由于while()循环的作用,scanf马上会循环进入第二次扫描,扫描到数字2之后又遇到了空格,停止扫描,这时候循环后进入第三次扫描,以此类推,由于while(count--)的限制,scanf会扫描五次后结束。这就是原因所在。接下来贴出完整代码:
#include<stdio.h>
#define MAXN 10000+10
int array[MAXN];
int main()
{
int count,i,m;
int num=0;
int temp=-1;
int target;
scanf("%d",&count);
while(count--)
scanf("%d",&array[num++]);
scanf("%d",&target);
for(i=0;i<num;i++)
{
if(array[i]==target)
{
printf("%d",i+1);
break;
}
}
if(i==num)
printf("%d",temp);
return 0;
}
相关文章推荐
- linux下查找字符串&mysql-为magento性能测试修改innodb的innodb_buffer_pool_size而引发的问题
- [C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)
- java蓝桥杯试题查找整数
- 【题目26】关于1-N的整数查找排序问题
- 无法查找或打开 PDB 文件,测试程序无法得到结果-VS 中配置OpenCV的问题
- 蓝桥 查找整数
- 从多方查找资源并测试终于解决了问题,特记录下。 其实如果在安装的时候,正确的安装,就不会出现下面的信息了. 如在Linux下安装,提示密码的时候,输入Root账号的密码就不会出现这个问题了!
- 机试题:查找基因序列问题
- 蓝桥杯试题集 基础练习 查找整数
- 测试整数类型:byte,short,int,long。以及进制之间的转换问题
- 蓝桥试题测试---序列求和
- 1-n之间的整数之和为指定数sum问题(百度之星往年试题)
- 对于大量整数 求重复 查找值 的问题总结
- 《编程珠玑》第二章三个问题A---查找40亿个32位整数中缺失的某个整数
- 蓝桥 查找整数
- 蓝桥试题测试---Fibonacci数列
- 对于大量整数 求重复 查找值 的问题总结
- 蓝桥基础练习 查找整数
- 查找程序中的错误(平凡的程序,不平凡的问题) 4.不定义第三个变量,互换两个变量的值 5.char 类型转换 6.输出 10~100 之间的随机整数
- [C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)