第二周题目

#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函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值