for循环内cin输入问题

http://www.nowcoder.com/test/question/done?tid=2628602&qid=25955#summary
这是解题时看到的别人的一个代码 
我的疑惑是 下面程序中 for循环内的 cin>>x; 我在vs2012控制台上跑,让我输入完所有x后,才去执行下面的if else ,这是为什么啊,不是输入一个x,
执行一下ifelse吗 ??难道是因为  myset.end()  一直没有值吗

#include<iostream>
#include <set>
usingnamespacestd;
 
intmain() {
    intp, n; //篮筐数,篮球数
    intx, i;
     
    while(cin >> p >> n){
        intflag=0; //作用:1.判断是否有冲突 2.如果有冲突则记录第一个冲突的序号
        set<int> myset; //每一批输入样例构造一个空集合
        for(i=1; i<=n; i++){ //以1开始,便于这个题目处理
            cin >> x;
            if(myset.find(x%p)!=myset.end() && !flag) flag = i; //注意输入示例,只记录第一次冲突的,后面再有冲突的并不记录
            elsemyset.insert(x%p);
        }
        if(flag) cout << flag << endl; // 有冲突
        elsecout << -1 << endl; // 没有冲突
    }
    return0;
}


若我想实现 在控制台输入一个数,执行一次ifelse,输入一次 执行一次ifelse,怎么做呢
全部评论
有一个投篮游戏。球场有p个篮筐,编号为0,1...,p-1。每个篮筐下有个袋子,每个袋子最多装一个篮球。有n个篮球,每个球编号x i  。规则是将数字为x i  的篮球投到x i  除p的余数为编号的袋里。若袋里已有篮球则球弹出游戏结束输出i,否则重复至所有球都投完。输出-1。问游戏最终的输出是什么? #include<iostream> #include <set> usingnamespacestd;   //作者 darren_wang intmain() {     intp, n; //篮筐数,篮球数     intx, i;           while(cin >> p >> n){         intflag=0; //作用:1.判断是否有冲突 2.如果有冲突则记录第一个冲突的序号         set<int> myset; //每一批输入样例构造一个空集合         for(i=1; i<=n; i++){ //以1开始,便于这个题目处理             cin >> x;             if(myset.find(x%p)!=myset.end() && !flag) flag = i; //注意输入示例,只记录第一次冲突的,后面再有冲突的并不记录             elsemyset.insert(x%p);         }         if(flag) cout << flag << endl; // 有冲突         elsecout << -1 << endl; // 没有冲突     }     return0; }
点赞 回复 分享
发布于 2016-03-14 17:59
没有权限去看题,单看代码  for(i=1; i<=n; i++){ //以1开始,便于这个题目处理             cin >> x;             if(myset.find(x%p)!=myset.end() && !flag) flag = i;             else myset.insert(x%p);         } 是for循环,输入所有n个x后,建立了set集合后,再去判断flag的,因为flag再for循环外面,放到里面就可以每次判断了。。。。
点赞 回复 分享
发布于 2016-03-14 17:13

相关推荐

04-21 11:22
已编辑
中华女子学院 UE4
点赞 评论 收藏
分享
04-09 09:47
门头沟学院 Java
Arbelite_:2-3k,这工资还不如去摇奶茶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务