奇数求和之用循环语句
这里是不是不可以这样写?或者说整个代码都错了?
你的i未进行初始化,i为随机值,且i的取值在m~n之间。
#include<stdio.h>
int main()
{
int m, n;
int i = 0;//对i进行初始化,否则i为随机值
int sum = 0;
scanf("%d %d", &m, &n);
i = m;//i从m开始
while (m <= i && i <= n)//i的取值范围在m~n之间
{
if (i % 2 != 0)
{
sum = sum + i;
}
i++;
}
printf("%d\n", sum);
return 0;
}
int main()
{
int m, n;
int sum = 0;
scanf("%d %d", &m, &n);
while (m <= n)//直接对m进行操作
{
if (m % 2 != 0)
{
sum = sum + m;
m = m + 2;//当第m的值本来就为奇数时,直接进行加2
}
else //当第m的值为偶数时,直接进行加1变为奇数
{
m++;
}
}
printf("%d\n", sum);
return 0;
}
把 i 初始赋值为m,即从区间较小的数开始判断;
然后,while循环的条件只需要 i <= n就可以了,即i 最大到n。
修改如下:
#include <stdio.h>
int main(void){
int m,n,i,sum=0;
scanf("%d %d",&m,&n);
i=m; // i 初始赋值为m,即从区间较小的数开始判断
// 这里 只需要i<=n,即遍历最大到n
while( i<=n){
if(i%2!=0){
sum= sum+i;
}
i++;
}
printf("%d", sum);
return 0;
}
49-62行就是刚刚的例子中做的操作,具体在代码注释中已经写明。
66,67行,分别递归处理左边和右边,最终完成整体排序。
这里还有一个问题:为什么每次都要从右边开始找,而不能从左边开始找呢?
如果从左边开始找,那么在这个状态时,i往右一步就停止了。这时候,如果交换基准数和指针i的元素,10会被交换到左边,不符合快速排序“左边的数都比基准数小”的限制。之所以要让指针j先动,就是因为,最后必须停在比基准数小的元素,只有右边先动才可以保证。
输入示例:[2, 3, 4, 5, 6, 7, 8, 9] 期望输出示例:24
解决方案: 我们可以使用一个for循环来遍历列表中的每个数字。对于每个数字,我们可以使用条件语句来判断它是否为奇数。如果是奇数,我们就把它累加到一个计数器中。最后,返回计数器的值即为奇数的总和。
下面是Python代码示例:
def sum_of_odd_numbers(numbers):
total = 0
for number in numbers:
if number % 2 != 0: # 判断是否为奇数
total += number # 累加奇数
return total
# 执行示例
numbers = [2, 3, 4, 5, 6, 7, 8, 9]
print(sum_of_odd_numbers(numbers))
# 输出结果:24
使用该函数可以求出任意列表中奇数的总和。