分解整数

2022-08-07 09:00

1个回答
讲思路不擅长啊...大体是这样了:
如15而言,外循环i从1到7,针对每一个i,都计算从它开始的连续和值,等于15了就输出一行.你还是看下伪代码吧:
n=15;
for(i=1;i<=n/2;i++)
{
sum=0;
for(j=i;j<=n/2+1;j++)
{
sum+=j;
if(sum==n)
{
for(k=i;k<=j;k++)
printf("%d ",k);
printf("\n");
break;
}
}
}

好吧..我重新研究了下,发现你的数据规模太大了,如果按上面的算法,效率非常低,改进了算法,如下:

思路:
如15,有3种情况,一种是2个数字:7,8,一种是3个数字:4,5,6,一种是5个数字:1,2,3,4,5;
我们先求得每种情况的平均值,如情况2的:15/3=5,然后就可以列出4,5,6了.
我们发现,如果是偶数个数字,如2个数字,平均值15/2=7.5,小数部分必然是0.5,这可以想象得到.
而奇数个数字的情况,如3个数字,15/3=5,平均值必然是整数.这也可以想象得到.
如是有以下算法:
long i,n,sqrtn,first;
scanf("%ld",&n);
sqrtn=(int)sqrt(n*2); //第t行
for(i=2;i<=sqrtn;i++)
{
first=n/i-(i-1)/2;
if((float)n/i-n/i==(i+1.0)/2.0-(i+1)/2 && first>0) //第s行
{
printf("%ld+...+%ld (%ld)",first,first+i-1,i);
}
printf("\n");
}
}

如注释处,第s行代码为关键代码(float)n/i-n/i==(i+1.0)/2.0-(i+1)/2即平均值的情况,这里也可以用求余.first>0即所有项必须为正整数.
第t行代码,连续正整数个数小于sqrt(N*2);这个可以从高斯求和公式推出来.
相关问答
成语有什么整整
1个回答2024-02-14 22:28
规规整整,只是一个词语,不是成语和规规整整类似的成语有:日日夜夜、期期艾艾、熙熙攘攘、兢兢业业、浩浩荡荡、影影绰绰、林林总总、战战兢兢、浑浑噩噩、唯唯诺诺、郁郁葱葱、洋洋洒洒、朝朝暮暮、形形色色、卿卿...
全文
我爱你整整十年 另类词
1个回答2023-04-30 01:31
爱你不止三五年
整整一天咋叫也叫不起
1个回答2024-03-14 14:49
病情分析:你好,一般小孩子脾胃比较虚弱,也可能是缺钙,也可能是家长没有给予良好的睡眠习惯。 指导意见:经常晒晒太阳,给孩子多吃一些易消化的辅食,均衡饮食,注意各个阶段应补充的维生素等营养物质,家长也要...
全文
听说你爱了他整整一个曾经
1个回答2024-03-20 11:57
听说你如今已没有曾经那么爱了。
有没有整人的笑话?整了人 那人还得笑的!
1个回答2024-01-20 07:18
如果遇见熊你怎么办? A,跑得比熊快。 B。跑得和熊一样快。 C, 跑得比熊慢。 选A的人比禽兽还禽兽。‘ 选B的人就是禽兽。 选C的人禽兽不如。 Q:人为什么要走去床上睡...
全文
我爱你爱了整整一个曾经我还会继续爱你整整一个未来是哪个小说里男主说的
1个回答2024-03-03 23:29
这段话选自《写给未来恋人的情书:最后的故事》 故事的女主角娜娜在死去前给男主郭敖说的一句话
一个整打一成语不是化整为零
1个回答2024-01-26 17:30
化零为整 huà líng wéi zhěng 【解释】把零散的部分集中为一个整体。 【出处】《抗日游击战争的战略问题》:“集中使用兵力,即所谓“化零为整”的办法,多半是在敌人进攻之时为了消灭敌...
全文
我有个同学,很烦人,我整整他。 因为他好找我的事
1个回答2024-02-02 00:12
打是解决不了办法的,最狠的是就是不要理他,无视他的存在,孤立他,哈哈哈哈