连续正整数的和 C语言 不知道如何处理这个细节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连续正整数的和 C语言 不知道如何处理这个细节相关的知识,希望对你有一定的参考价值。
【问题描述】
对于一个正整数x(3≤x≤1000),寻找一种方案,将x分解成连续正整数的和。即
x=x1+x2+……+xn
其中x1、x2、……、xn是自小至大的连续正整数,且n>1。
比如,对于输入的数字10,可以分解成“10=1+2+3+4”。
如果存在多于一种的可行方案,则选取等式右边项的个数最多的那一种。比如,9可以分解为“9=2+3+4”,也可以分解为“9=4+5”。但是前一种分解成3个数的和,后一种分解成2个数的和,所以前一种是有效解。如果无法分解,则输出No Answer。
【样例输入1】
38
【样例输出1】
38=8+9+10+11
【样例输入2】
256
【样例输出2】
No Answer
#include <stdio.h>
main()
int i,j,k,n=0,x,s;
scanf("%d",&x);
for (i=1;i<x/2;i++)
s=i;
k=i;
while(s<x)
k++;
s+=k;
if (s==x)
printf("%d=%d",x,i);
for (j=i+1;j<=k;j++)
printf("+%d",j);
printf("\n");
n++;
if (n==0)
printf("No Answer\n");
错误输出:
250=3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22
250=48+49+50+51+52
250=61+62+63+64
--------------------------------------------------------------------------------
期望输出:
250=3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22
这个错误如何处理?
break;本回答被提问者采纳 参考技术B 在判断条件里加一个&&n!=1 参考技术C 求解释啊~~
C4.5 算法如何处理连续数据?
【中文标题】C4.5 算法如何处理连续数据?【英文标题】:How does the C4.5 Algorithm handle continuous data? 【发布时间】:2013-03-15 19:05:38 【问题描述】:我在.net
中实现C4.5 algorithm,但是我不清楚它如何处理“连续(数字)数据”。谁能给我更详细的解释?
【问题讨论】:
【参考方案1】:对于连续数据,C4.5 使用阈值,其中小于阈值的所有内容都位于左侧节点中,而大于阈值的所有内容都位于右侧节点中。问题是如何根据您提供的数据创建该阈值。诀窍是按连续变量升序对数据进行排序。然后迭代数据,在数据成员之间选择一个阈值。例如,如果属性 x 的数据是:
0.5, 1.2, 3.4, 5.4, 6.0
您首先选择一个介于 0.5 和 1.2 之间的阈值。在这种情况下,我们可以只使用平均值:0.85。现在计算你的杂质:
H(x < 0.85) = H(s) - l/N * H(x<0.85) - r/N * H(x>0.85).
其中l是左节点的样本数,r是右节点的样本数,N是被分裂节点的总样本数。在上面的示例中,x>0.85 作为我们的拆分,然后 l=1、r=4 和 N=5。
记住计算出的杂质差,现在计算它以区分 2 和 3(即 x>2.3)。对每个拆分重复此操作(即 n-1 个拆分)。然后选择最小化 H 的分割。这意味着你的分裂应该比不分裂更纯粹。如果您不能增加结果节点的纯度,则不要拆分它。您还可以设置一个最小节点大小,这样您就不会导致左侧或右侧节点仅包含一个样本。
【讨论】:
以上是关于连续正整数的和 C语言 不知道如何处理这个细节的主要内容,如果未能解决你的问题,请参考以下文章