本周带来3道题,两道是PTA上的,一道是洛谷上的。
1. 验证“哥德巴赫猜想”
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
输入样例:
24
输出样例:
24 = 5 + 19
我们可以直接写一个接口函数验证它是不是素数,然后再在主函数中需要时引用。
#include<stdio.h>
#include<math.h>
int prime(int x);
int main()
{
int n,i;
scanf("%d",&n);
for(i=2;;i++)
{
if(prime(i)&&prime(n-i))
{
printf("%d = %d + %d",n,i,n-i);
break;
}
}
return 0;
}
int prime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return 1;
}
2. 输出整数各位数字
本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:
输入在一行中给出一个长整型范围内的非负整数。
输出格式:
从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。
输入样例:
123456
输出样例:
1 2 3 4 5 6
本题可将此数字视为一个字符串,这样输出他的每一位就较为简单。
#include<stdio.h>
int main()
{
char c;
do
{
scanf("%c",&c);
if(!(c>='0'&&c<='9'))
break;
printf("%c ",c);
}while(c>='0'&&c<='9');
return 0;
}
3.Apples Prologue / 苹果和虫子
题目描述
八尾勇喜欢吃苹果。她现在有 m(1≤m≤100)个苹果,吃完一个苹果需要花费 t(0≤t≤100)分钟,吃完一个后立刻开始吃下一个。现在时间过去了 s(1≤s≤10000)分钟,请问她还有几个完整的苹果?
输入格式
输入三个非负整数表示 m,t,s。
输出格式
输出一个整数表示答案。
输入输出样例
输入样例
50 10 200
输出样例
30
此题看似简单,实则不难,只是需要心思周密,注意m,t,s的范围,考虑多种可能的输入,将全部情况包含。
我第一次做这道题时,只觉十分简单,两行代码草草了事,可时一提交,却发测试点只过了一个。由此可知也不要忽视简单题,很多看着简单的题我也并不是能做得又快又好。
#include<stdio.h>
#include<math.h>
int main()
{
int m,t,s,y;
scanf("%d %d %d",&m,&t,&s);
if(t==0)
printf("0");
else
{
y=m-ceil((double)s/t);
if(y>=0)
printf("%d",y);
else
printf("0");
}
return 0;
}
这次就这三道题了,虽然都不是很难,但其中很多个点也不是我迅速反应出来或者立刻想到较优解的。感谢大家阅读!