2019秋期第二次机考总结

文章目录


在这里插入图片描述

贴邮票二是之前升级版的贴邮票,就是多了几重循环

回文质数,据说,最省时间判断质数的循环长这样:

int zhishu(int i)
{
	int j;
	for(j=2;j*j<=i;j++)//for(j=2;j<=sqrt(i);j++)
	{
		if(i%j==0){return 0;break;
		}
	}
	return 1;
}

en…写17进制的时候,没理清逻辑,浪费了时间,虽然,就算时间充足,我也写不出最后一题。
看这个纠结的过程。。

#include<stdio.h>
int main()
{
	int jinzhi10=0,num=0,len=0,chengshu=1,i,t=0,chengshu2=1;
	char jinzhi17;
	//scanf("%c",&jinzhi17);
	//t=jinzhi17-97;
	while(1)
	{
		scanf("%c",&jinzhi17);
		if(jinzhi17=='\n')break;
		//printf("%c",jinzhi17);
		/*scanf("%c",&jinzhi17);
		printf("%d",jinzhi17);*/
		//printf("%d\n",chengshu);
		//printf("%d\n",jinzhi17-97);
		//jinzhi10=jinzhi10+(jinzhi17-97)*chengshu;
		//printf("%d\n",jinzhi10);
		//chengshu*=10;
		//len++;
		t=t*17+(jinzhi17-97);
		
		//printf("%d\n",t);
	}
	//t/=17;
	/*for(i=1;i<=len;i++)
	{
		jinzhi10=t/chengshu*chengshu2;
		t=t%chengshu;
		chengshu/=10;
		chengshu2*=10;
	}*/
	printf("%d\n",t);
	return 0;
}

重头戏,(其实似曾相识)

E. 24点三

运行时间限制: 1000 运行内存限制: 65536
作者: scsyuanbaoku 是否specialjudge: False
题目描述
“24点”是一种扑克牌游戏。具体玩法是一副牌中抽去大小王剩下52张,任意抽取4张牌,利用四则运算把牌面上的数算成24。每张牌能且只能用一次。如5、1、7、1,可以用(5-1)×(7-1)或(5+7)×(1+1)两种方法得到。
经计算机准确计算,一副牌(54张,其中去掉两张王牌)中,任意抽取4张可有1820种不同组合,其中有458个牌组算不出24点,如1、1、1、5。

现我们将规则修改如下:1、每次是5张牌;2、只能用加法或减法,不允许用乘法和除法;3、5张牌不要求都用,但如果要用只能用一次;4、牌面点数的范围是大于等于-30且小于等于30。
现在就请你写一段程序来判断某5张牌是否能算出24点。

输入格式
第一行为一个整数T(0<T<20),代表测试数据组数。后边是T行,每行均为5个用空格分隔的整数(每个整数都大于等于-30且小于等于30),代表牌点。
输出格式
为T行,每行对应前边的T组测试数据,如果根据规则能算出24则该行输出YES,否则输出NO。

输入样例
2
6 6 6 6 6
5 5 5 5 5
输出样例
YES
NO
没过的代码,一个朴素的想法是,将所有情况列出来。(最后二十分钟,我就憋出来这个)

#include<stdio.h>
int main()
{
	int t,i,a,b,c,d,e;//t hang
	scanf("%d",&t);
	while(t)
	{
		scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
		if(a==24||b==24||c==24||d==24||e==24)printf("YES");
		else if((a+b==24)||(c+b==24)||(d+b==24)||(e+b==24)||(a+c==24)||(a+d==24)||(a+e==24)||(c+d==24)||(c+e==24)||(d+e==24))printf("YES");
		else if((a+b+c==24)||(a+b+d==24)||(a+b+e==24)||(a+c+d==24)||(a+c+e==24)||(b+c+d==24)||(b+c+e==24)||(b+d+e==24)||(c+d+e==24))printf("YES");
		else printf("NO");
		t--;
	}
	return 0;
}

然后,有大佬完成了我未完成的工作
在这里插入图片描述
还是这个想法,完全可以将它要乘的数构成循环条件

#include<stdio.h>
#include<time.h>
int main()
{
	int a,b,c,d,e,i,j,k,l,t,m;
	scanf("%d",&t);
	srand(time(NULL));
	while(t)
	{
		int flag=0;
		scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
		/*a=-30+rand()%61;
		b=-30+rand()%61;
		c=-30+rand()%61;
		d=-30+rand()%61;
		printf("%d %d %d %d\n",a,b,c,d);*/
	for(i=-1;i<2;i++)
	 for(j=-1;j<2;j++)
	  for(k=-1;k<2;k++)
	   for(l=-1;l<2;l++)
	    for(m=-1;m<2;m++)
	   {
	   	if((a*i+b*j+c*k+d*l+m*e)==24)flag=1;
	   }
	if(flag==1)printf("YES\n");
	else printf("NO\n");
	t--;
	}
	
	return 0;
}

寄语自己:长江后浪推前浪,小心你这个前浪都算不上的,死在沙滩上。

发布了26 篇原创文章 · 获赞 18 · 访问量 1653

猜你喜欢

转载自blog.csdn.net/qq_40774136/article/details/103043429