1.The Cow-Signal

思路:char类型的二维数组存储符号,在输出符号时多加两层for循环,循环k次,一个代表行,一个代表列。

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("cowsignal.in","r",stdin);
	freopen("cowsignal.out","w",stdout);
	int n,m,k;char a[20][20];
	cin>>n>>m>>k;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=0;i<n;i++){
		for(int e=0;e<k;e++){
			for(int j=0;j<m;j++){
				for(int w=0;w<k;w++){
					cout<<a[i][j];
				}
			}
			cout<<endl;	
		}
	}
	return 0;
}

2.乒乓球

思路:用while循环判定输入条件,如果输入的是‘E’终止循环,再用一个char类型数组存储数据,第一个for循环是11分制,用两个int类型的变量存储输或赢的球数,在一方赢球大于等于11时,还要判定赢球差是否大于1,才可以输出最终结果。第二个循环也一样,只是赢球数要大于等于21才可以。

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("pingpong.in","r",stdin);
	freopen("pingpong.out","w",stdout);
	char s,k[70000];
	int n=0,m[70000],w=0,l=0;
	while(cin>>s){
		if(s!='E'){
			k[n]=s;
			if(s=='W'){
				m[n]=1;
			}else if(s=='L'){
				m[n]=0;
			}
			n++;			
		}else{
			break;
		}
	}
	for(int i=0;i<n;i++){
		if(m[i]==1){
			w++;
		}else{
			l++;
		}
		if(w>=11){
			if(w-l>=2){
				cout<<w<<":"<<l<<endl;
				w=0;
				l=0;				
			}else{
				if(w-l>=2||l-w>=2){
					cout<<w<<":"<<l<<endl;
					w=0;
					l=0;					
				}
			}
		}else if(l>=11){
			if(l-w>=2){
				cout<<w<<":"<<l<<endl;
				w=0;
				l=0;				
			}else{
				if(w-l>=2||l-w>=2){
					cout<<w<<":"<<l<<endl;
					w=0;
					l=0;					
				}
			}
		}
	}
	if(w!=0||l!=0){
		cout<<w<<":"<<l<<endl;
	}
	cout<<endl;
	w=0;
	l=0;
	for(int i=0;i<n;i++){
		if(m[i]==1){
			w++;
		}else{
			l++;
		}
		if(w>=21){
			if(w-l>=2){
				cout<<w<<":"<<l<<endl;
				w=0;
				l=0;				
			}else{
				if(w-l>=2||l-w>=2){
					cout<<w<<":"<<l<<endl;
					w=0;
					l=0;					
				}
			}
		}else if(l>=21){
			if(l-w>=2){
				cout<<w<<":"<<l<<endl;
				w=0;
				l=0;				
			}else{
				if(w-l>=2||l-w>=2){
					cout<<w<<":"<<l<<endl;
					w=0;
					l=0;					
				}
			}
		}
	}
	if(w!=0||l!=0){
		cout<<w<<":"<<l;
	}
	return 0;
}

代码有误,非准确答案。

3.纪念品分组

思路:第一个for循环用来输入数据。bool类型的k来判断是否被用过。第二个for循环是重点,首先要用两个for循环,表示两个数据,判断条件为:两数之和要大于现在的最大值,小于纪念品价格之和的上限,并且不是一个数,两个数字都没被用过。第二个if是为了判断最大值不为0。第三个for循环是把没有配成对的数字单独一组。

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("group.in","r",stdin);
	freopen("group.out","w",stdout);
	long long w,n,p[30001],sum=0,maxx=0,a=0,b=0;
	cin>>w>>n;
	int k[30001]={0};
	for(int i=0;i<n;i++){
		cin>>p[i];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(p[i]+p[j]>maxx&&k[i]!=1&&k[j]!=1&&i!=j&&p[i]+p[j]<=w){
				maxx=p[i]+p[j];
				a=i;
				b=j;					
			}
		}
		if(maxx!=0){
			sum++;
			k[a]=1;
			k[b]=1;
			a=0;
			b=0;
		}
		maxx=0;				
	}
	for(int i=0;i<n;i++){
		if(k[i]==0){
			sum++;
			k[i]=1;
		}
	}
	cout<<sum;
	return 0;
}

此代码会超时,还需继续改进。