本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
这个题目其实也不难,但是要注意m=n且不为素数的情况,这个时候素数的个数就应该是0,另外要排除输入为1的情况,1不是素数。下面是我的代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
int m=0,n=0;
int count=0,sum=0;
double x=0;
scanf("%d %d",&m,&n);
for(int i=m;i<=n;i++)
{
x=sqrt(i);
int j=2;
for(;j<=x;j++)
{
if(i%j==0){
break;
}
}
if(j>x&&x!=1){
count++;
sum+=i;
}
}
printf("%d %d",count,sum);
return 0;
}
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
- 时间限制:400ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:张彤彧
- 单位:浙江大学
这个题目其实也不难,但是有个地方要注意,就是当n过大的时候,分子和分母可能用int装不下,所以要定义成double类型,下面是我的代码:
#include <stdio.h>
int main(void)
{
int n=0;
scanf("%d",&n);
double fenzi=2,fenmu=1,t=0;
double sum=0;
for(int i=0;i<n;i++)
{
sum+=fenzi/fenmu;
t=fenzi;
fenzi=fenzi+fenmu;
fenmu=t;
}
printf("%0.2f",sum);
return 0;
}
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
- 时间限制:2500ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:徐镜春
- 单位:浙江大学
如果没有时间的限制的话,这个题目其实非常简单,但是有时间限制,在n=7的时候会超过时间,当时也纠结了我很久,最后解决的办法就是我把pow函数自己写了一遍,没有调用 文件中的那个函数,就运行得快了一点,其实当时还想了一个办法就是:因为n=7的时候就是7位数,而7位数中如果有3个9,或者5个8的话就会超过7位,所以我找了一个变量来数,达到了就break,就不用循环这么多次了,但是发现时间更慢了..........另外就是我还看到有些人就是吧n=7的情况单独写了出来,对这个题目来说也是可以的。下面是我的代码:
#include <stdio.h>
int p(int a,int b);
int main(void)
{
int n=0,t=0;
scanf("%d",&n);
int m=p(10,n-1);
int v=p(10,n);
for(int i=m;i<v;i++)
{
int k=i;
int sum=0;
while(k>0){
t=k%10;
k=k/10;
sum+=p(t,n);
}
if(sum==i){
printf("%d\n",i);
}
}
return 0;
}
int p(int a,int b)
{
int t=a;
for(int i=1;i<b;i++)
a=a*t;
return a;
}
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
- 时间限制:400ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:张彤彧
- 单位:浙江大学
题目不难,要注意的是:m*n=最小公倍数*最大公约数,最大公约数用辗转相除法求就好,下面是我的代码:
#include <stdio.h>
int main(void)
{
int m=0,n=0,a=0,b=0;
scanf("%d %d",&m,&n);
int ji=m*n;
if(m>n)
{
a=n;
b=m;
}
else{
a=m;
b=n;
}
while(b%a!=0)
{
int t=b;
b=a;
a=t%a;
}
printf("%d %d",a,ji/a);
return 0;
}
皮球从某给定高度*落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。
输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。
输入样例:
33 5
输出样例:
94.9 1.0
- 时间限制:400ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:C课程组
- 单位:浙江大学
题目不难,注意三个点就好了,1.是在空中经过的距离包括上升和下降的距离,而第一次和最后一次都只有下降没有上升。2.注意第n次落地前高度为0的情况 。3.当n=0时,反弹的高度和在空中经过的距离都为0;
#include <stdio.h>
int main(void)
{
int n=0,time=0;
double sum=0,h=0;
scanf("%lf %d",&h,&n);
while(h!=0&&time<n)
{
sum+=h;
time++;
h=h/2;
sum+=h;
}
if(n==0)
{
sum=0;
h=0;
}else{
sum=sum-h;
}
printf("%0.1f %0.1f",sum,h);
return 0;
}
本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数n。
输出格式:
输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格。
输入样例:
7
输出样例:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
- 时间限制:400ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:C课程组
- 单位:浙江大学
题目分两个部分来做,上三角形和下三角形,上面那个三角形分空格和星形来输出,注意星型个数和行数的关系,下面是我的代码:
#include <stdio.h>
int main(void)
{
int n=0;
scanf("%d",&n);
int row=(n/2)+1;
for(int i=1;i<=row;i++)
{
for(int j=row-i;j>0;j--)
{
printf(" ");
}
for(int j=0;j<(2*i-1);j++)
{
printf("* ");
}
printf("\n");
}
for(int i=1;i<row;i++)
{
for(int j=0;j<i;j++)
{
printf(" ");
}
for(int j=(row-i)*2-1;j>0;j--)
{
printf("* ");
}
printf("\n");
}
return 0;
}
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?
输入格式:
输入在一行中给出正整数N(1<N≤10)。
输出格式:
在一行中输出第一天共摘了多少个桃子。
输入样例:
3
输出样例:
10
- 时间限制:400ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:徐镜春
- 单位:浙江大学
题目其实也不难,要注意的是:上一次的总数是先加一再乘二得来的,并且第n天没有吃,所以是循环n-1次,下面是我的代码:
#include <stdio.h>
int main(void)
{
int n=0,x=1;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
x=(x+1)*2;
}
printf("%d",x);
return 0;
}
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
- 时间限制:400ms
- 内存限制:64MB
- 代码长度限制:16kB
- 判题程序:系统默认
- 作者:徐镜春
- 单位:浙江大学
对于这个题目.......(madan 我画图画了好久.......)其实就是斐波那契数组,就是从第三项开始后面的数是前面两个数的和,但是要注意的是输入的n不一定是斐波那契数组中的数,而且这个时候要取的是,达到n要用的最小月数,下面是我的代码:
#include <stdio.h>
int main(void)
{
int n=0,count=2,sum=0,x1=1,x2=1;
scanf("%d",&n);
if(n==1)
{
count=1;
}else{
while(sum<n){
sum=x1+x2;
count++;
x1=x2;
x2=sum;
}
}
printf("%d",count);
return 0;
}