第1关:求解表达式
任务要求
编写程序,实现求解表达式的值。 Y=1+1/3+1/5+1/7+…+1/(2m+1)
输入要求
输入一个正整数m
(0<=m<=1e5)
输出要求
输出表达式结果Y
,注意保留三位小数。
输入样例
1
输出样例
1.333
//根据题目要求完成程序设计
#include<stdio.h>
int main()
{
double Y = 1;
int m = 0;
scanf("%d",&m);
for(int i = 1; i <= m; i++)
{
Y += 1.0/(2*i+1);
}
printf("%.3f",Y);
}
第2关:逆序数
任务要求
从键盘输入一个正整数,输出其逆序数,并判断是否为对称数。如果是输出YES
,否则输出NO
。
输入要求
输入一个整数num
(0<=num<1e9)
输出要求
输出结果共 2 行,第一行结果为正整数num
的逆序数,第二行结果为YES
或者NO
,代表num
是否为对称数。
输入样例1
12345
输出样例1
54321
NO
输入样例2
612216
输出样例2
612216
YES
//根据题目要求完成程序设计
#include<stdio.h>
#include<math.h>
int main()
{
int num1 = 0;
int num2 = 0;
int tmp = 0;
scanf("%d",&num1);
tmp = num1;
while(tmp)
{
num2*=10;
num2+=tmp%10;
tmp=tmp/10;
}
printf("%d\n",num2);
if(num1==num2)
{
printf("YES");
}
else
{
printf("NO");
}
}
第3关:菱形
任务要求
编写程序,实现输出菱形。
输入要求
输入一个正整数m
(1<=m<=100),注意m
为奇数。
输出要求
使用*
输出菱形图案。
//根据题目要求完成程序设计
#include<stdio.h>
int main()
{
int row = 0;
scanf("%d",&row);
//上三角
int ROW = row/2;
int ROWS = ROW;
for(int i = 1; i<=ROW; i++)
{
for(int j = 1;j<=ROWS;j++)
{
printf(" ");
}
ROWS--;
for(int j = 1; j<=2*i-1; j++)
{
printf("*");
}
printf("\n");
}
//中间行
for(int i = 0; i<row;i++)
{
printf("*");
}
printf("\n");
//下三角
ROWS = ROW;
for(int i = 1; i<=ROW;i++)
{
for(int j = 1;j<=i;j++)
{
printf(" ");
}
for(int j = 1;j<ROWS*2;j++)
{
printf("*");
}
ROWS--;
printf("\n");
}
}
第4关:素数问题
//根据题目要求完成程序设计
#include<stdio.h>
#include<math.h>
int main()
{
int a = 0;
int b = 0;
int count = 0;
scanf("%d%d",&a,&b);
for(a;a<=b;a++)
{
int flagh = 1;
if (a==1)
continue;
for(int i = 2; i<=sqrt(a); i++)
{
if(a%i==0)
{
flagh = 0;
break;
}
}
if (flagh)
{
printf("%d ",a);
count++;
}
}
if (count==0)
{
printf("NO");
}
}
总结:
第一关,求解表达式较为简单,易错点在在于明晰输出的要求=》保留三位小数。
第二关,题眼在于如何将输入的数组逆序
while(tmp)
{
num2*=10;
num2+=tmp%10;
tmp=tmp/10;
}
以上代码可以很方便的求输入数的逆序。
第三关,写这一题的时候一定要记得写注释(血的教训)注释可以快速帮你梳理代码思路,配合调试,可以快速查错,纠错。
第四关
for(int i = 2; i<=sqrt(a); i++)
求素数时使用sqrt可以有效优化代码。