#include<stdio.h>
#define b 100000
#define y 10
int main(){
int t,n,i,j,q,x,count;
char a[y][b];
scanf("%d",&t);//几组数据
int p[t];
for(i=0;i<t;i++){
scanf("%d",&n);
scanf("%s",&a[i]);//输入字符
count=0;
for(q=0;q<n;q++){
if(a[i][q]=='A'||a[i][q]=='D'||a[i][q]=='O'||a[i][q]=='P'||a[i][q]=='Q'||a[i][q]=='R')//判断圈数
count=count+1;
else if(a[i][q]=='B')
count=count+2;
}
p[i]=count;
}
for(j=0;j<t;j++){
printf("%d\n",p[j]);
}
return 0;
}
主要是一个取址符没打代码一直运行错误没报错。
#include<stdio.h>
void pai(int a,int b,int c){//对牌进行排序
int t;
if(a<b){
t=a;a=b;b=t;}
if(a<c){
t=a;a=c;c=t;}
if(b<c){
t=b;b=c;c=t;}
}
int main(){
int t,i,j,m,x,w;
int b[6];
scanf("%d",&t);
int a[t],l[t];
for(i=0;i<t;i++){
scanf("%d",&a[i]);}
for(j=0;j<t;j++){
x=a[j];
for(m=0;m<6;m++){
b[m]=x%10;//把六位数分为六张牌
if(x%10==0){//判断10的情况
b[m]=10;
x=x/100;
}
else
x=x/10;
}
pai(b[0],b[1],b[2]);
pai(b[3],b[4],b[5]);
if(b[0]==b[1]&&b[1]==b[2]&&b[3]==b[4]&&b[4]==b[5]){//三张一样
if(b[0]>b[3])
l[j]=2;
else if(b[0]<b[3])
l[j]=1;
else
l[j]=0;}
if((b[0]==b[1]&&b[1]==b[2])&&b[3]!=b[4])
l[j]=2;
if((b[3]==b[4]&&b[4]==b[5])&&b[0]!=b[1])
l[j]=1;
if(b[0]==b[1]+1&&b[1]==b[2]+1&&b[3]==b[4]+1&&b[4]==b[5]+1){//顺子
if(b[0]>b[3]){l[j]=2;}
else if(b[0<b[3]]){l[j]=1;}
else l[j]=0;}
if((b[0]==b[1]+1&&b[1]==b[2]+1)&&b[3]!=b[4]&&b[3]!=b[4]+1)
l[j]=2;
if((b[3]==b[4]+1&&b[4]==b[5]+1)&&b[0]!=b[1]&&b[0]!=b[1]+1)
l[j]=1;
if((b[0]==b[1]||b[1]==b[2])&&(b[3]==b[4]||b[4]==b[5])){
if(b[0]==b[1]&&b[1]==b[3]&&b[3]==b[4]){//对子
if(b[2]>b[5]){l[j]=2;}
else if(b[2]<b[5]){l[j]=1;}
else
l[j]=0;}
if(b[1]==b[2]&&b[2]==b[4]&&b[4]==b[5]){
if(b[0]>b[3]){l[j]=2;}
else if(b[0]<b[3]){l[j]=1;}
else
l[j]=0;
}
if(b[0]==b[1]&&b[3]!=b[4])
l[j]=2;
if(b[0]!=b[1]&&b[3]==b[4])
l[j]=1;
}
if(b[0]!=b[1]&&b[0]!=b[2]&&b[1]!=b[2]&&b[3]!=b[4]&&b[3]!=b[5]&&b[4]!=b[5]){//都不是
if(b[0]>b[3]){l[j]=2;}
else if(b[0]<b[3]){l[j]=1;}
else if(b[0]==b[3]){
if(b[1]>b[4]){l[j]=2;}
else if(b[1]<b[4]){l[j]=1;}
else if(b[1]==b[4]){
if(b[2]>b[5]){l[j]=2;}
else if(b[2]<b[5]){l[j]=1;}
else if(b[2]==b[5]){l[j]=0;}
}
}
}
}
for(w=0;w<t;w++){//输出结果
if(l[w]==1)
printf("benTuTuT win!\n");
else if(l[w]==2)
printf("XXL win!\n");
else
printf("No winner!");
}
return 0;
}
这题的思维难度不大,但判断情况的结果太多了,考虑不同的情况有点麻烦,不知道是不是我的方法有点繁琐,导致代码太长。
#include<stdio.h>
#define m 100000
int max(int x,int y){
return x>y?x:y;//比较max函数
}
void pai(int a[][m],int i,int n);
int main(){
int t,n,x,y,z;
int i,j,q,p;
long long int sum=0,qum=0,v;
scanf("%d",&t);
scanf("%d %d %d %d",&n,&x,&y,&z);
int a[t][m];
for(i=0;i<t;i++){
for(j=1;j<=n;j++){
scanf("%d",&a[i][j]);
}
v=0;
p=0;
while(1){//取出连续数字
v++;
if(v-p<=z&&a[i][v]>=x&&a[i][v]<=y){
sum+=a[i][v];
qum=max(qum,sum);
}
else if(v-p>z&&a[i][v]>=x&&a[i][v]<=y){
p++;
sum-=a[i][p];
sum+=a[i][v];
qum=max(qum,sum);
}
else{//数字不连续
sum=0;
p=v;
}
if(v>n)
break;
}
printf("%lld",qum);}
return 0;}
开始题目没有读清楚,没看见连续的三个数字。
题目在连续的三个数字的判断中比较难想。
学会定义max和min函数