主题:有规律求和程序怎样编写??看看高手怎样编写的??
773950918
[专家分:0] 发布于 2010-06-02 22:45:00
有规律求和程序怎样编写??看看高手怎样编写的??
1+2-3+4+5-6-7+8+9+10-11-12-13+14+15+16-17-18-19-20+..............是有规律的?看看程序怎样编写??
用
#include <iostream>
using namespace std;
int main()
{
return 0;
}
编写哦!
用函数或指针哦!!
回复列表 (共22个回复)
11 楼
雪光风剑 [专家分:27190] 发布于 2010-06-05 05:30:00
违背题意了,题意里第一个数是1,你这里第一个数成0了
12 楼
773950918 [专家分:0] 发布于 2010-06-05 13:47:00
#include<iostream>
using namespace std;
int main()
{int n,sum=1;
cin>>n;int j=1;int k=1;
cout<<k;
for(int i=2;i<=n;j++)
{
int c=j;
for(;c>0;c--)
{
if(i>n)
break;
cout<<"+"<<i;
sum=sum+i;
i++;
}
c=j;
for(;c>0;c--)
{if(i>n)
break;
sum=sum-i;
cout<<"-"<<i;
i++;
}
}
cout<<"="<<sum<<endl;
return 0;
}
13 楼
雪光风剑 [专家分:27190] 发布于 2010-06-05 14:10:00
一眼看上去也能实现目的,我想的比这个简单,呵呵
14 楼
773950918 [专家分:0] 发布于 2010-06-05 17:13:00
还要努力!谢谢!
15 楼
dckenny [专家分:0] 发布于 2010-06-06 10:03:00
main()
{
int a=1,b=1,i=2,sum=1;
while(i<=20)
{
if(b<=(2+(a-1)*2)/2)
{
sum+=i;
b++;
i++;
printf("%d,%d\n",sum,b);
}
else
{
sum-=i;
b++;
i++;
printf("%d,%d\n",sum,b);
}
if(b>2+(a-1)*2)
{
a++;
b=1;
printf("b\n");
}
}
}
不知这样做对不
16 楼
zxf12604 [专家分:0] 发布于 2010-06-06 15:54:00
fff
17 楼
josephkwok [专家分:530] 发布于 2010-06-06 22:41:00
我的想法是這樣的.
首先1不在規律里.
2-3=-1;
4-6=-2;
5-7=-2;
8-11=-3;
9-12=-3;
10-13=-3;
時間複雜度應該可以是O(n);
而且大概時間可能是O((n-1)/2);
如果你能想出一個數學公式來算的話,那你就做到極致了,因為只需常數時間.
例如算1+2+3... ,我想大家不會真的就逐個逐個加吧...
18 楼
雪光风剑 [专家分:27190] 发布于 2010-06-06 23:57:00
[quote]我的想法是這樣的.
首先1不在規律里.
2-3=-1;
4-6=-2;
5-7=-2;
8-11=-3;
9-12=-3;
10-13=-3;
時間複雜度應該可以是O(n);
而且大概時間可能是O((n-1)/2);
如果你能想出一個數學公式來算的話,那你就做到極致了,因為只需常數時間.
例如算1+2+3... ,我想大家不會真的就逐個逐個加吧...[/quote]
在n比较大的时候,你仍然要计算一定的迭代。也许运行效率比较低,但是确实简单累加的代码容易想,而且简洁
19 楼
dckenny [专家分:0] 发布于 2010-06-07 12:04:00
如果“+”和“-”个数比为1:1 那结果是:1-(1^2+2^2+3^2+4^2+......n^2)吧?n就是最后“+”或“-”的个数
20 楼
josephkwok [专家分:530] 发布于 2010-06-07 12:19:00
有的人喜歡簡潔,有的人喜歡高速度,而我暫時是比較喜歡高速度的.
我来回复