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;
}
此代码会超时,还需继续改进。