入门题目
1040,1041,1042三个题目是关系密切,难度逐步增加的题目。在做这三个题目之前大家最好先想想如下题目怎么做?
输入一个整数n,输出数列1+2+3+……前n项的和。
我们让循环变量i从1、2、3变化到n,全部数字加起来就可以达到目的,
代码实现如下:
#include <stdio.h>
int main()
{
int n;
int sum;
scanf("%d", &n);
for (int i = 1; i <= n; i++){
sum = sum + i;
}
printf("%d\n", sum);
}
1040题
1040跟前面的例子思路很像,只不过i的变化不是+1,+1的变化,而是+2,+2的变化,我们只需将for语句的i++改成i = i + 2,i <= n的循环条件也需啊相应的修改,我们可以根据等差公式,算出最后一项是2*n - 1。
#include <stdio.h>
int main()
{
int n;
float sum = 0;
scanf("%d", &n);
for (int i = 1; i <= 2*n - 1; i += 2) {
// 这里的1.0不能写成1,c语言int / int除不出小数的。
sum = sum + 1.0 / i;
}
printf("%.2f\n", sum);
}
我们可以看到,分母的是一串等差数列,公差为2,首项为1,所以我们可以得出通项公式。可以有另一种写法:
#include <stdio.h>
int main()
{
int n;
float sum = 0;
scanf("%d", &n);
int a = 0;
for (int i = 1; i <= n; i++) {
// 这里的1.0不能写成1,c语言int / int除不出小数的。
a = 2 * i - 1;
sum = sum + 1.0 / a;
}
printf("%.2f\n", sum);
}
1041题
1041跟1040的差别在于,不再是一直加上1.0/i,而是1次加,1次减,我们可以根据i的变化来判断,当i是1,3,5个数是加的,偶数则是减少的。
#include <stdio.h>
int main()
{
int n;
float sum = 0;
scanf("%d", &n);
int j = 1; //表示是第几个数
for (int i = 1; i <= 2*n - 1; i += 2) {
// 这里的1.0不能写成1,c语言int / int除不出小数的。
if (j % 2 == 0) {
sum = sum - 1.0 / i;
} else {
sum = sum + 1.0 / i;
}
j++;
}
printf("%.2f\n", sum);
}
第二种解法:
#include <stdio.h>
int main()
{
int n;
float sum = 0;
scanf("%d", &n);
int a = 0;
for (int i = 1; i <= n; i++) {
// 这里的1.0不能写成1,c语言int / int除不出小数的。
a = 2 * i - 1;
if (i % 2 == 0) {
sum = sum - 1.0 / a;
} else {
sum = sum + 1.0 / a;
}
}
printf("%.2f\n", sum);
}
1042题
1042题跟1041的差别在于分子不再固定是1.0,那我们将1.0按要求修改就好,我们可以看到分子刚好要的就是j的值。
#include <stdio.h>
int main()
{
int n;
float sum = 0;
scanf("%d", &n);
int j = 1; //表示是第几个数
for (int i = 1; i <= 2*n - 1; i += 2) {
if (j % 2 == 0) {
// float 是将j转换成float类型,保证j / i得出小数的结果
sum = sum - (float) j / i;
} else {
sum = sum + (float) j / i;
}
j++;
}
printf("%.3f\n", sum);
}