社区
C语言
帖子详情
急求代码?c语言
tiger_my
2008-04-22 05:19:47
要求输入一个数A (0-10000)用1-n的自然数相加得到这个数
并且每个自然数只能出现一次 可以正也可以负
问最少用多少个自然数可以得到这个输入的数
例如输入 12
12=-1+2+3+4+5+6-7 答案为7
例如输入5
5=-1+2+3-4+5 答案为5
例如输入2
2=1-2+3 答案为3
例如输入1
1=1 答案为1
...全文
154
14
打赏
收藏
急求代码?c语言
要求输入一个数A (0-10000)用1-n的自然数相加得到这个数 并且每个自然数只能出现一次 可以正也可以负 问最少用多少个自然数可以得到这个输入的数 例如输入 12 12=-1+2+3+4+5+6-7 答案为7 例如输入5 5=-1+2+3-4+5 答案为5 例如输入2 2=1-2+3 答案为3 例如输入1 1=1 答案为1
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
UltraBejing
2008-05-01
打赏
举报
回复
等待牛人来答.
tiger_my
2008-04-23
打赏
举报
回复
谢谢各位!
szduweibing
2008-04-23
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int a[200];
int i,j;
int sum,num;
int n;
printf("input a num:");
scanf("%d",&n);
memset(a,0,200);
sum=0;
for(i=1;i<=2*n;i++)
{
sum+=i;
if(sum>=n && ((sum%2)==(n%2)))
break;
}
num=i;
sum=(sum-n)/2;
while(sum>i)
{
a[i]=-1;
sum=sum-i;
i--;
}
if(sum>0)
a[sum]=-1;
printf("%d=",n);
for(j=1;j<=num;j++)
{
if(a[j]==0)
{
if(j==1)
printf("%d",j);
else
printf("+%d",j);
}
else
printf("-%d",j);
}
printf("\n");
}
fozaber
2008-04-23
打赏
举报
回复
我说一下原理,就是先求1~n的和sum,然后用sum去减A,当sum大于A的时候,才可以写出A的表达式。然后用
(sum-A)/2,得出的值就是负数的总和!
例如:
A=8
sum=1+2+3+4=10
(sum-A)/2=1
那么只要把sum里的1写成负值就行了。
8=-1+2+3+4
A=12
sum=1+2+3+4+5+6+7=28
(sum-A)/2=8=1+7
所以只要把1,7写成负值就行了。
12=-1+2+3+4+5+6-7
我上面的代码可以写出表达式!
fozaber
2008-04-23
打赏
举报
回复
#include <stdio.h>
int main()
{
while(1)
{
int index_number,array_index1=0,sum_number1=0,input_number,output_number,array_index2,sum_number2,key_number;
bool ok=true;
int sub_array[100];
printf("input a number (1~10000):\n");
scanf("%d",&input_number);
for(index_number=1;;index_number++)
if(((sum_number1-input_number)%2==0)&&((sum_number1-input_number)>=0))
break;
else
sum_number1=sum_number1+index_number;
printf("the key is %d\n",index_number-1);
sum_number2=(sum_number1-input_number)/2;
key_number=index_number-1;
for(key_number;key_number>0;key_number--)
if(sum_number2-key_number>=0)
{
sub_array[array_index1]=key_number;
array_index1++;
sum_number2=sum_number2-key_number;
}
printf("%d=",input_number);
for(output_number=1;output_number<=(index_number-1);output_number++)
{
for(array_index2=0;array_index2<array_index1;array_index2++)
{
ok=true;
if(output_number==sub_array[array_index2])
{
printf("-%d",output_number);
ok=false;
break;
}
}
if(ok)
printf("+%d",output_number);
}
printf("\n\n");
}
return 0;
}
ForestDB
2008-04-23
打赏
举报
回复
[Quote=引用 5 楼 ljq279318147 的回复:]
假设1~ n的和sum
如果((sum - A) % 2) == 0 && sum > A就行了
[/Quote]
为啥?
lukeamon
2008-04-23
打赏
举报
回复
原理说明一下啊。
lee213
2008-04-22
打赏
举报
回复
楼上的厉害,学习ing……
Alix-Lei
2008-04-22
打赏
举报
回复
按照思路写了个简单的实现,也可以用递归实现
#include <stdio.h>
int main()
{
int i;
int sum = 0;
int count = 0;
int num;
printf("Enter the num you want:");
scanf("%d",&num);
for(i = 1;i <= 1000;i++)
{
count ++;
sum += i;
if(sum == num)
{
printf("%d ",count);
return 0;
}
if(sum < num && (sum + count + 1) > num)
{
for(i;i < 1000;i++)
{
count++;
sum += count;
if(((sum - num) % 2) == 0)
{
printf("%d ",count);
return 0;
}
else
{
for(i;i <= 1000;i++)
{
count++;
sum += count;
if(((sum - num) % 2) == 0)
{
printf("%d ",count);
return 0;
}
}
}
}
}
}
return 0;
}
Alix-Lei
2008-04-22
打赏
举报
回复
假设1~ n的和sum
如果((sum - A) % 2) == 0 && sum > A就行了
darkarthur
2008-04-22
打赏
举报
回复
貌似在ACM上看到过这样的题目~
一下子找不到代码了
青葱岁月不可追
2008-04-22
打赏
举报
回复
[Quote=引用 1 楼 ForestDB 的回复:]
帮顶,看谁能给个好算法.
[/Quote]
jieao111
2008-04-22
打赏
举报
回复
sc
ForestDB
2008-04-22
打赏
举报
回复
帮顶,看谁能给个好算法.
自控测温反馈系统的
c语言
代码
,[求助]STC89C52测温系统实现--有现图,
急求
C语言
代码
!!!...
做测温体统~但由于
C语言
代码
的问题,特来求助各位!!!
代码
在最下面,按照原理图,希望各位大哥给加点针对这个点哭显示温度的
代码
。由于
C语言
的有限,拜托各位了!!
代码
如下-------------------------------------...
c语言
写自动计算程序,
急求
急急急急
急求
,
急求
用
C语言
编写一个计算器程序,
代码
量为三百行左右!!!!!在线等...
满意答案vafodshk2018.01.08采纳率:43%等级:7已帮助:59人#include #include #include #define MAXOP 100#define NUMBER '0' //标识读入的是数字#define NAME 'n' //标识读入的是字符串(函数名或非法字符串)#...
c语言
编程矩阵主对角线相同,
急求
!
c语言
求N*N矩阵中主对角线和次对角线的元素之和...
急求
!
c语言
求N*N矩阵中主对角线和次对角线的元素之和來源:互聯網2010-02-24 23:29:06評論分類: 電腦/網絡 >> 程序設計 >> 其他編程語言問題描述:在N*N矩阵中(N行N列的数组),求主对角线和次对角线的...
c语言
代码
将文件保存到本地,
急求
如何将下列
C语言
程序数据存储到文件中?
该楼层疑似违规已被系统折叠隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n=0;int rest[7][7];...
有偿
急求
拓扑排序
C语言
代码
小弟真的不会
拓扑排序 题目描述:判断一个有向图是否存在回路,并求出有向无环图的拓扑序列。 功能要求及说明: (1)对一个AOV网,应判断其是否是有向无环图,若是则输出其任意一个拓扑排序序列,不是则进行相关的说明;...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章