关于连续输入多组数据的浅谈

这里是本咸鱼的第一篇博客,由于被一道水题给搞的要死要活的,心态爆炸,于是去问了下大佬,然后知道了不少东西,在这里记录一下,先粘下这个水题
一道彻彻底底的水题
再粘上咸鱼我的错误代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[100],sum=0,t=0,p;
	while(1){
		cin>>a[0];
		while(a[t]!=0){
			p=0;
			for(int i=0;i<t;i++)
				if(a[t]==a[i])
					p=1;
			if(p!=1)
				sum++;
			t++;
			cin>>a[t];		
			}
		if(sum>=12)
			cout<<"yes"<<endl;
		else
			cout<<"no"<<endl;
		if(a[0]==0)
			break;
		t=0;
		sum=0;
	}
 } 

大佬告诉我我的代码输出超限了
因为交题默认多组输入是有限行,而我的则是可以输入无限行,所以出现了这个结果
再再粘上大佬的代码

#include<bits/stdc++.h>
using namespace std;
int bk[12222];
int sum=0;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	f1:
		int f=0;
		sum=0;
		memset(bk,0,sizeof(bk));
		int n;
		while(cin>>n){
			f=1;
			if(n==0)
				break;
			if(bk[n]==0){
				bk[n]=1;
				sum++;
			}
		}
		if(f==0)
			return 0;
		if(sum>=12)
			cout<<"yes"<<endl;
		else
			cout<<"no"<<endl;
		goto f1;
}
这里他用了一个平时不让用的goto语句来判断,如果能输入就继续运行,
如果输入的不是int类型的n就 return 0 来结束程序

这里的while语句判断需要注意

while(cin>>n){
			f=1;
			if(n==0)
				break;
			if(bk[n]==0){
				bk[n]=1;
				sum++;
			}

我一开始以为是cin >>n!=0是判断条件,但其实是通过输入的n的类型来判断的,如果输入的n是int类型,进行while循环(输入0也进行循环),不然就不进行while循环,然后借助开关f来判断最后是输出结果还是 return 0

题外话:
以前光想着多学点东西,但这种基础的东西却没学好,以后还是得多注意一下格式,省的老WA搞得心态爆炸
最后大佬还跟我说了一些考题会考结束格式的,例如不知道输入多少行,其他各行之间都有回车但最后一行没有回车之类的,这些等我见到再说吧

猜你喜欢

转载自blog.csdn.net/qq_44039966/article/details/84954976