Code Bye

有关奇数相加的小问题

计算正整数 m 到 n(包括m 和 n )之间的全部奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35
#include<iostream>
using namespace std;
int main(){
int m,n,flag=0,s=0,i;
cin>>m>>n;
int a[n+1];
for( i=m;i<=n;i++){
a[i]=i;
}
for( i=m;i<=n;i++){
if(a[i]%2==0){
flag=1;
}
}
for( i=m;i<=n;i++){
if(flag==0){
s+=a[i] ;
}
}
cout<<s<<endl;
return 0;
}
为啥结果总是0呢
解决方案

30

直接一个for循环,每次循环后i+=2不就行了?
或套用求和公式
#include<iostream>
using namespace std;
int main(){
	int m,n,s=0,i;
	cin>>m>>n;
	if(m > n)
		cout << "输入错误" << endl;
	else
	{
		for(i = 2 * (m / 2) + 1; i < n; i += 2)
			s += i;
	}
	cout<<s<<endl;
	return 0;
}

2

flag=1;基本没有什么用处,只要有一个偶数,flag就是1,s就不会增加了。
估计原本意思是想每一个数组带一个flag吧,来表示偶数。

3

先不说其他方法之类的,也不说 flag 然并卵,单从代码来说,只要a[i]%2==0成立一次,flag 永远都是1. 所以下面的 flag==0 永远不成立。
for( i=m;i<=n;i++){
    if(a[i]%2==0){
          flag=1;
     }
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有关奇数相加的小问题