7-37 寻找250,输入上的问题

7-37 寻找250
分数 10
作者 陈越
单位 浙江大学
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5

#include<stdio.h>
int main()
{
    int k;
    int t=0;
    while(1)
    {
        scanf("%d",&k);
        t++;
        if(k==250)
        {
            printf("%d\n",t);
            break;
        }
    }
    return 0;
}

不太懂这个输入是怎么回事,比如我这个代码,输入250回车后就会输出来相应的位置,题目给的测试样例250回车后面还能输出字是为什么,还是说每一次输入只是按相应的数字空格比如120空格然后下一个数字

#include<stdio.h>
int main()
{
    int k;
    int t=0;
    int t1 = 0;
    while(scanf("%d",&k) == 1)
    {        
        t++;
        if(k==250)
        {
            t1 = t;
        }
    }
    printf("%d\n",t1);
    return 0;
}
 

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7622903
  • 除此之外, 这篇博客: C与C++程序设计学习笔记中的 5、某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的字符串来表示。例如:0010110011 就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    #include <stdio.h>
    int ti[11] = { 0 }; //用来存储每道题的回答情况0或者1,0表示错误,1表示正确
    //提醒:数组ti的编号实际用1-10
    //score表示当前得分,num是当前第num道题目
    void f(int score, int num)
    {
    	if (num == 11)//10道题目全部做完
    	{
    		if (score == 100)
    		{
    			int i = 0;
    			for (i = 1; i <= 10; i++)
    				printf("%d", ti[i]);
    			printf("\n");
    		}
    	}
    	else //10道题目没有做完
    	{
    		ti[num] = 1; //讨论第num道题目的正确情况
    		f(score * 2, num + 1);
    		ti[num] = 0; //讨论第num道题目的错误情况
    		f(score - num, num + 1);
    	}
    }
    int main(void)
    {
    	f(10, 1);//从基础分10分开始,从第1题开始
    	return 0;
    }
    


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你代码运行结果加注释

img

代码注释

#include<stdio.h>

int main() {

  // 声明变量k
  int k; 
  
  // 声明变量t,用于统计循环次数
  int t=0;

  // 无限循环
  while(1) {

    // 输入k
    scanf("%d",&k);
    
    // t自增
    t++;

    // 判断k是否等于250
    if(k==250) {
    
      // 如果等于250,打印循环次数t
      printf("%d\n",t);
      
      // 跳出循环
      break;
    }
  }

  return 0;
}

这么改,供参考:

#include<stdio.h>
int main()
{
    int k;
    int t=0;
    int t1 = 0;
    while(scanf("%d",&k) == 1) // 输入Ctrl + z 结束输入,如:888 666 123 -233 250 13 250 -222^Z
    {
        t++;
        if(k == 250 && t1 == 0)
        {
            t1 = t;
        }
    }
    printf("%d\n",t1);
    return 0;
}