求两数之间连续奇数的,有更好的吗?

OpenOffice_org 2005-04-12 11:20:24
#include<stdio.h>
main()

{
int a,b,c;
c=0;

printf("输入两个数字求出它们之间奇数的和.\n请输入第一个: \n");
scanf("%d",&a);
printf("输入第二个:\n");
scanf("%d",&b);
if(a<b)
{
if(a%2==0)a++;

for(;a<=b;a+=2)
c=c+a;
}
else
{
if(b%2==0)b++;

for(;b<=a;b+=2)
c=c+b;
}
printf("奇数和为:\n%d\n",c);
}



请指教,谢谢!
...全文
120 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aladar 2005-04-15
  • 打赏
  • 举报
回复
大家都在说什么啊,pcboyxhy(-273.15℃) 的解已经是最优的了

回贴不看贴...
brtjiba 2005-04-13
  • 打赏
  • 举报
回复
to: copygirl(wa!) ( ) 信誉:100 2005-04-12 12:54:00 得分: 0

你这个办法有点浪费时间。
--------------------------------------------------------------------------------
那我来个常数时间的:
// terw.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,temp;
while(1)
{
cin>>i>>j;
if(i<j)
{ //强制转化为1.....10这种格式
if(i%2==0)
i++;
if(j%2!=0)
j++;
//1~10的和为55,其中奇数为25=(55-5)/2,也就是我这两步
temp=(j+i)*(j-i+1)/2-(j-i+1)/2;
temp=temp/2;
cout<<temp;
}
else//反过来自己写
{
}
}
return 0;
}


carroty 2005-04-13
  • 打赏
  • 举报
回复
代码太臃肿了.
carroty 2005-04-13
  • 打赏
  • 举报
回复
直接套公式好了.你可以自己推一下.不就是个级数的问题吗?

还有两个数比大小可以用:?运算符.
inlin 2005-04-13
  • 打赏
  • 举报
回复
o: copygirl(wa!) ( ) 信誉:100 2005-04-12 12:54:00 得分: 0

你这个办法有点浪费时间。
--------------------------------------------------------------------------------
那我来个常数时间的:
// terw.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i,j,temp;
while(1)
{
cin>>i>>j;
if(i<j)
{ //强制转化为1.....10这种格式
if(i%2==0)
i++;
if(j%2!=0)
j++;
//1~10的和为55,其中奇数为25=(55-5)/2,也就是我这两步
temp=(j+i)*(j-i+1)/2-(j-i+1)/2;
temp=temp/2;
cout<<temp;
}
else//反过来自己写
{
}
}
return 0;
}

这个算法有点出错了
题目是求两数之间连续奇数的
那如果开头和末尾的数是奇数是不能算的
修改一下就可以了
jingyueid 2005-04-12
  • 打赏
  • 举报
回复
楼住的ID与楼住的问题不符啊!
copygirl 2005-04-12
  • 打赏
  • 举报
回复
嘿,它还有乱码
/*等差数列求和公式*/
copygirl 2005-04-12
  • 打赏
  • 举报
回复
你这个办法有点浪费时间。
#include "stdio.h"

init_ab(int *a,int *b)
{
int p;
if(a>b)
{
p=*a;
*a=*b;
*b=p;
}
*a=(*a%2==0)?(*a+1):*a;
*b=(*b%2==0)?(*b-1):*b;
}
int cal(int a,int b)
{
int n=0;
n=(b-a)/2+1;
return(n*a+n*(n-1)); /*µÈ²îÊýÁÐÇóºÍ¹«Ê½*/
}
main()
{
int a=2,b=10;
init_ab(&a,&b);
printf("%d",cal(a,b));
getch();
}
如果数据量不大,速度上看不出来;如果数据量比较大的话(不包括溢出),我这个方法会比你的快些。
aladar 2005-04-12
  • 打赏
  • 举报
回复
既然都用>>做除法了,干嘛不用&做取余数... if(a&1!=1)好了
pcboyxhy 2005-04-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int a, b, c;
scanf("%d%d", &a, &b);
if(a>b) {a^=b; b^=a; a^=b;}
if(a%2!=1) ++a;
if(b%2!=1) --b;
if(a>b)
c=0;
else
c=(a+b)*(((b-a)>>1) + 1)>>1;
printf("%d\n", c);
system("PAUSE");
return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧