Day 6 算法笔记之入门模拟3.1(二)

目录

4.比较奇偶数个数

5.Shortest Distance (20)

6.要用longlong型变量,lld进行输入输出

7.数字分类 (20)

8.下方大佬的适合研究,我这个就比较直白。

9.锤子剪刀布 (20)


4.比较奇偶数个数

#include <cstdio>
#include <cstring>


int main(){
	
	int a;
	
	while(scanf("%d",&a)!=EOF){
		int b,num_odd=0,num=0;
		for(int i=0;i<a;i++){
			scanf("%d",&b);
			if(b%2==0){
				num+=1;
			}else{
				num_odd+=1;
			}
		}
		char martix[10] = "YES";
		char martix_2[10] = "NO";
		if(num>num_odd){
			printf("%s\n",martix_2);
		}else{
			printf("%s\n",martix);
		}
	}
	
	
	return 0;
}

5.Shortest Distance (20)

第一次英文题目,看了好一会才看懂题目意思,难度倒是不大。

但是不知道为什么我的答案和大佬的一样,我的却显示答案错误........

#include <cstdio>
#include <cstring>


int main(){
	
	
	int num;
	scanf("%d",&num);
	int martix[100000];
	int all;
	
	for(int i=0;i<num;i++){
		scanf("%d",&martix[i]);
		all+=martix[i];
	}
	
	int lines;
	
	scanf("%d",&lines);
	
	while(lines--){
		int a,b;
		
		scanf("%d %d",&a,&b);
		if(a>b){
			int temp=b;
			b=a;
			a=temp;
		}
		
		int dis1=0,dis2=0;
		for(int i=a-1;i<b-1;i++){
			dis1+=martix[i];
		}
		dis2 = all-dis1;
		
		if(dis1<dis2){
			printf("%d\n",dis1);
		}else{
			printf("%d\n",dis2);
		}
		
		
	}
	
	return 0;
}


//#include <cstdio>
//int main()
//{
//	int circle[100000],distance[100000];
//	distance[1]=0;
//	int n,m,sum=0;
//	scanf("%d",&n);	
//	int b,e,low,high,dis1,dis2;
//	for(int i=1;i<=n;i++)
//	{
//		scanf("%d",&circle[i]);
//		sum+=circle[i];
//		distance[i+1]=distance[i]+circle[i];
//	}
//	scanf("%d",&m);
//	for(int j=0;j<m;j++)
//	{
//		scanf("%d%d",&b,&e);
//		low=(b<e?b:e);
//		high=(b>e?b:e);
//		dis1=distance[high]-distance[low];
//		dis2=sum-dis1;
//		if(dis1<dis2)
//			printf("%d\n",dis1);
//		else
//			printf("%d\n",dis2);
//	}
//	return 0;
//}

6.要用longlong型变量,lld进行输入输出

#include <cstdio>
#include <cstring>


int main(){
	
	int num;
	scanf("%d",&num);
	int i=0;
	while(num--){
		i++;
		long long a,b,c;
		scanf("%lld %lld %lld",&a,&b,&c);
		
		if(a+b>c){
			printf("Case #%d: true\n",i);
		}else{
			printf("Case #%d: false\n",i);
		}
	}
	
	return 0;
}

7.数字分类 (20)

这一题有更好的思路的,参考大佬的。

首先,不需要使用函数,因为每种问题在一次循环里只会执行一遍,执行函数反而有点画蛇添足,而且其实都是计算余数的问题,直接把余数取出来计算即可。

其次,我被sizeof害惨了,这个函数返回的好像不是我想象中的那种数组长度。

一度写到暴走

#include <cstdio>
#include <cstring>
#include <math.h>

void get_A1(int martix[],int num){
	int a=0,b=0;
	
	for(int i=0;i<num;i++){
		b = martix[i]; 
	}
	
	int number=0;
	
	for(int i=0;i<num;i++){
		if(martix[i]%5==0&&martix[i]%2==0){
			a+=martix[i];
			number++;
		}
	}
	if(number!=0){
	    printf("%d ",a);
	}else{
		printf("%c ",'N');
	}
	
}

void get_A2(int martix[],int num_1){
	int a=0,num=0;
	for(int i=0;i<num_1;i++){
		if(martix[i]%5==1){
			num+=1;
			a+=martix[i]*pow(-1,num+1);
		}
	}
	if(num!=0){
	    printf("%d ",a);
	}else{
		printf("%c ",'N');
	}
}

void get_A3(int martix[],int num){
	int a=0,number=0;
	for(int i=0;i<num;i++){
		if(martix[i]%5==2){
			a++;
		}
	}
	if(a!=0){
	    printf("%d ",a);
	}else{
		printf("%c ",'N');
	}
}

void get_A4(int martix[],int num_1){
	float a=0,num=0;
	for(int i=0;i<num_1;i++){
		if(martix[i]%5==3){
			a+=martix[i];
			num++;
		}
	}
	if(num!=0){
	    printf("%.1f ",a/num);
	}else{
		printf("%c ",'N');
	}
}

void get_A5(int martix[],int num){
	int max=0,number=0;
	for(int i=0;i<num;i++){
		if(martix[i]%5==4&&martix[i]>max){
			max=martix[i];
			number++;
		}
	}
	if(number!=0){
	    printf("%d\n",max);
	}else{
		printf("%c\n",'N');
	}
}




int main(){
	int num;
	while(scanf("%d",&num)!=EOF){
		int martix[10001];
		for(int i=0;i<num;i++){
			scanf("%d",&martix[i]);
		}
		
	get_A1(martix,num);
	get_A2(martix,num);
	get_A3(martix,num);
	get_A4(martix,num);
	get_A5(martix,num);
		
	
		
		
		
		
	}
	
	
	
	return 0;
}

//#include <cstdio>
//#include <cmath>
//int main()
//{
//	int n,number[1000];
//	while(scanf("%d",&n)!=EOF)
//	{
//		int a1=0,a2=0,a3=0,a5=0;
//		int b1=0,b2=0,b5=0;
//		double a4=0;
//		int m=0,k=0;
//		for(int i=0;i<n;i++)
//		{
//			scanf("%d",&number[i]);
//			int f=number[i]%5;
//			if(f==0)
//			{
//				if(number[i]%2==0) 
//				{
//					a1+=number[i];
//					b1++;
//				}
//			}
//			else if(f==1)
//			{
//				a2+=(number[i]*pow(-1,m++));
//				b2++;
//			}
//			else if(f==2)
//				a3++;
//			else if(f==3)
//			{
//				a4+=number[i];
//				k++;
//			}
//			else
//			{
//				if(number[i]>a5)
//					a5=number[i];
//				b5++;
//			}
//		}
//		if(b1==0) printf("N ");
//		else printf("%d ",a1);
//		if(b2==0) printf("N ");
//		else printf("%d ",a2);
//		if(a3==0) printf("N ");
//		else printf("%d ",a3);
//		if(k==0) printf("N ");
//		else printf("%.1f ",a4/k);
//		if(b5==0) printf("N");
//		else printf("%d",a5);
//		printf("\n");
//	}
//	return 0;
//}

8.下方大佬的适合研究,我这个就比较直白。

#include <cstdio>
#include <cstring>
#include <math.h>

int main(){
	
	char A[100],B[100];
	int a,b;
	while(scanf("%s %d %s %d",A,&a,B,&b)!= EOF){
//	while(scanf("%s %d %s %d",A,&a,B,&b)!= EOF){
		
		
		int sum1=0,sum2=0,num1=0,num2=0;
		for(int i=0;i<strlen(A);i++){
			if(A[i]-'0'==a){
				num1++;
				sum1+=a*pow(10,num1-1);
			}
		}
		
		for(int i=0;i<strlen(B);i++){
			if(B[i]-'0'==b){
				num2++;
				sum2+=b*pow(10,num2-1);
			}
		}
		printf("%d\n",sum1+sum2);
	}
	
	return 0;
}
//#include <cstdio>
//#include <cstring>
//void Dispose(char a[],char b)
//{
//	int num=0;
//	for(int i=0;a[i]!='\0';i++)
//		if(a[i]==b)
//			num++;
//	for(int i=0;i<num;i++)
//		a[i]=b;
//	a[num]='\0';
//}
//int main()
//{
//	char A[11],B[11];
//	char a,b;
//	while(scanf("%s %c %s %c",A,&a,B,&b)!=EOF)
//	{
//		int aa=0,bb=0;
//		Dispose(A,a);
//		sscanf(A,"%d",&aa);
//		Dispose(B,b);
//		sscanf(B,"%d",&bb);
//		printf("%d\n",aa+bb);
//	}
//	return 0;
//}

9.锤子剪刀布 (20)

中间有一个bug卡了我好久,%c是字符,可以吸收换行符和空格,所以在scanf之前要用getchar吸收!

#include <cstdio>
#include <cstring>
#include <math.h>

int main(){
	
	int num;
	while(scanf("%d",&num)!= EOF){

		int a=0,b=0,c=0;
		int c1=0,j1=0,b1=0;
		int c2=0,j2=0,b2=0;
		char x,y;
		getchar();
		for(int i=0;i<num;i++){
			scanf("%c %c",&x,&y);
			getchar();
			if(x==y){
				c+=1;
			}else{
				if(x=='C'&&y=='J'){
					a+=1;
					c1++;
					j2++;
				}else if(x=='J'&&y=='B'){
					a+=1;
					j1++;
					b2++;
				}else if(x=='B'&&y=='C'){
					a+=1;
					b1++;
					c2++;
				}
			}	
		}
		int martix[100] = {c1,j1,b1};
		int martix_2[100] = {c2,j2,b2};
		char index[100]={'C','J','B'};
		int max=0,max_2=0;
		for(int i=1;i<3;i++){
			if (martix[max]<martix[i]){
				max = i;
			}
			else if (martix[max]==martix[i]){
				if (index[max] > index[i]){
					max = i;
				}
			}
		}
		for(int i=1;i<3;i++){
			if (martix_2[max_2]<martix_2[i]){
				max_2 = i;
			}
			else if (martix_2[max]==martix_2[i]){
				if (index[max_2] > index[i]){
					max_2 = i;
				}
			}
		}
		b = num-a-c;
		printf("%d %d %d\n",a,c,b);
		printf("%d %d %d\n",b,c,a);
		printf("%c %c\n",index[max],index[max_2]);
//		printf("%c\n",index[max_2]);
		}
	
	return 0;
}




//#include <cstdio>
//#include <cstring>
//struct person
//{
//	int win,lose,tie,t[3];
//	person()
//	{
//		win=0;lose=0;tie=0;
//		for(int i=0;i<3;++i)
//			t[i]=0;
//	}
//};
//int judge(person a)
//{
//	int max=-1,index=0;
//	for(int i=0;i<3;++i)
//		if(a.t[i]>max)
//		{
//			index=i;
//			max=a.t[i];
//		}
//	return index;
//}
//int main()
//{
//	int n;
//	char a,b;
//	char res[3]={'B','C','J'};
//	while(~scanf("%d",&n))
//	{
//		getchar();
//		person plus,minus;
//		for(int i=0;i<n;++i)
//		{
//			scanf("%c %c",&a,&b);
//			getchar();
//			if(a==b)
//			{
//				++plus.tie;
//				++minus.tie;
//			}
//			else if(a=='B'&&b=='C')
//			{
//				++plus.win;
//				++minus.lose;
//				++plus.t[0];
//			}
//			else if(a=='C'&&b=='J')
//			{
//				++plus.win;
//				++minus.lose;
//				++plus.t[1];
//			}
//			else if(a=='J'&&b=='B')
//			{
//				++plus.win;
//				++minus.lose;
//				++plus.t[2];
//			}
//			else if(b=='B'&&a=='C')
//			{
//				++minus.win;
//				++plus.lose;
//				++minus.t[0];
//			}
//			else if(b=='C'&&a=='J')
//			{
//				++minus.win;
//				++plus.lose;
//				++minus.t[1];
//			}
//			else if(b=='J'&&a=='B')
//			{
//				++minus.win;
//				++plus.lose;
//				++minus.t[2];
//			}
//		}
//		printf("%d %d %d\n",plus.win,plus.tie,plus.lose);
//		printf("%d %d %d\n",minus.win,minus.tie,minus.lose);
//		printf("%c %c\n",res[judge(plus)],res[judge(minus)]);
//	}
//	return 0;
//}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值