计算正整数 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呢
#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吧,来表示偶数。
估计原本意思是想每一个数组带一个flag吧,来表示偶数。
3
先不说其他方法之类的,也不说 flag 然并卵,单从代码来说,只要a[i]%2==0成立一次,flag 永远都是1. 所以下面的 flag==0 永远不成立。
for( i=m;i<=n;i++){ if(a[i]%2==0){ flag=1; } }