1. 程式人生 > >關於連續輸入多組資料的淺談

關於連續輸入多組資料的淺談

這裡是本鹹魚的第一篇部落格,由於被一道水題給搞的要死要活的,心態爆炸,於是去問了下大佬,然後知道了不少東西,在這裡記錄一下,先粘下這個水題
一道徹徹底底的水題
再粘上鹹魚我的錯誤程式碼

#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搞得心態爆炸
最後大佬還跟我說了一些考題會考結束格式的,例如不知道輸入多少行,其他各行之間都有回車但最後一行沒有回車之類的,這些等我見到再說吧