社区
C语言
帖子详情
编程题一道
zwt7790195
2007-09-01 11:08:20
输出和为一个给定整数的所有组合
例如n=5
5=1+4;5=2+3(相加的数不能重复)
则输出
1,4;2,3
...全文
1116
26
打赏
收藏
编程题一道
输出和为一个给定整数的所有组合 例如n=5 5=1+4;5=2+3(相加的数不能重复) 则输出 1,4;2,3
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
食人族哲学家
2007-09-05
打赏
举报
回复
坚决反对递归.本人的递归就相当差,但不是因为差而不用,而是基本不用而能力变的很糟糕.递归就是无数次的函数调用(伴随着大量的进出栈和内存消耗),效率极其低下.如果要搞程序,个人认为递归只用于2种情况,1.新手学习有关;2.实在没办法了(技术和时间上)
dustcool
2007-09-03
打赏
举报
回复
tree
sky03111
2007-09-02
打赏
举报
回复
//此题目是要找出用户给定的数字范围内的回文数!
#include <stdio.h>
void sky(){
int I = 0; //声明变量并赋初值。
printf("请输入您要进行解读的整形数字:");
scanf("%d",&I); //得到用户输入的数据。
int r[I]; //声明整形数据的数组,并以数字的大小决定数组的大小。
for(int i = 0;i<I;i++){ //变量 I 为数组 r 的长度!
if(r[i]!=r[I-i-1]){ //判断是否被显示!
printf("%d + %d;",&r[i],&r[I-i-1]);//显示所有的组合!
}
}
static void main(){
sky();//此操作只执行一遍!
}
sky03111
2007-09-02
打赏
举报
回复
此解决方案未编译过哦。请大家多多指教!呵呵
sky03111
2007-09-02
打赏
举报
回复
//此题目是要找出用户给定的数字范围内的回文数!
#include <stdio.h>
void sky(){
int I = 0; //声明变量并赋初值。
printf("请输入您要进行解读的整形数字:");
scanf("%d",&I); //得到用户输入的数据。
int r[I]; //声明整形数据的数组,并以数字的大小决定数组的大小。
for(int i = 0;i<I;i++){ //变量 I 为数组 r 的长度!
if(r[i]!=r[I-i]){ //判断是否被显示!
printf("%d + %d;",&r[i],&r[I-i-1]);//显示所有的组合!
}
}
static void main(){
sky();//此操作只执行一遍!
}
sanyuesanshi
2007-09-02
打赏
举报
回复
程序如下,测试通过
#include<iostream>
#include<vector>
using namespace std;
vector<int> a;
int main(){
void f(int,int);
std::cout<<"please input a number:";
int num;
std::cin>>num;
f(1,num);
}
void f(int min,int obj){
for(int i=min;i<obj-i;++i){
a.push_back(i);
for(int j=0;j<a.size();j++){std::cout<<a[j]<<'+';}
std::cout<<obj-i<<endl;
f(i+1,obj-i);
a.pop_back();
}
}
mxliang
2007-09-02
打赏
举报
回复
楼上的
scanf("%d",&I); //得到用户输入的数据。
int r[I]; //声明整形数据的数组,并以数字的大小决定数组的大小
有问题啊(窃以为)
ld_key_new
2007-09-02
打赏
举报
回复
c#版递归实现,m为给定整数,测试通过。
private int[] temp=new int[m]; int curPos=0;
private void Find(int CurVal)
{
temp[curPos] = CurVal;
int Sum = 0;
for (int lint_LoopCount = 0; lint_LoopCount <= curPos; lint_LoopCount++)
{
Sum += this.temp[lint_LoopCount];
}
if (Sum == m&&curPos!=0)
{
string lstg_Temp = "";
for (int lint_LoopCount = 0; lint_LoopCount <= curPos; lint_LoopCount++)
{
lstg_Temp += temp[lint_LoopCount] + ",";
}
MessageBox.Show(lstg_Temp);
curPos--;
return;
}
else if (Sum > m) { curPos--; return; }
else
{
for (int i = CurVal + 1; i < m; i++)
{
curPos++;
Find(i);
}
curPos--;
}
}
调用函数:
for (int i = 1; i < m i++)
{
this.curPos = 0;
this.Find(i);
}
expter
2007-09-01
打赏
举报
回复
#include<iostream>
using namespace std;
int sum=0;
int Num(int n,int a)
{
sum+=n;
if(n==0)
{
cout<<endl;
return 0;
}
else
{
if(sum>a)
{
sum-=n;
n-=1;
return Num(n,a);
}
else
{
cout<<"+"<<n;
return Num(n,a);
}
}
}
int main()
{
int a=0,n=0,summ=0;
cin>>a; //输入的数
for(int i=a;i>0;i--)
{
n=a-i; //取出减去i后的得数
if(n>=i) //当n>=i(即3=3时)n最高只能是i,以免出现6=2+4的重复现象
{
n=i;
}
cout<<a<<"="<<i;
if(n==0)
{
cout<<endl;
}
sum=i;
while(n>0) //n==0进行下一次取n操作
{
summ+=1;
Num(n,a); //对n进行分解
if(n!=1)
{
cout<<a<<"="<<i;
}
sum=i; //为进行下一步处理,使sum清0
if(sum+n+1<a && i!=1 && n!=1)//为适应出现6=2+2+1+1情况使6=2+2+2中的第3个2划分
{
cout<<"+"<<n;
sum+=n;
n-=1;
Num(n,a);
sum=i;
cout<<a<<"="<<i;
summ+=1;
}
else
{
n-=1;
}
}
}
summ+=1;
cout<<"num = "<<summ<<endl;
return 0;
}
看看对不哦
zwt7790195
2007-09-01
打赏
举报
回复
大家误会这道题的意思了 看好是 输出和为一个给定整数的所有组合
加入输入的是10 那么1+2+3+4 也是哦.
beansz
2007-09-01
打赏
举报
回复
6=1+5, 2+4, 1+2+3 ?
飞喵
2007-09-01
打赏
举报
回复
www.baidu.com
散分吧~
expter
2007-09-01
打赏
举报
回复
赫赫 散分吧
cofchen
2007-09-01
打赏
举报
回复
同意楼上的观点。哈
linfengc
2007-09-01
打赏
举报
回复
100分哦,有倒分嫌疑。。
lz还是把分3了吧
linfengc
2007-09-01
打赏
举报
回复
这个题太弱智了。。。
ckt
2007-09-01
打赏
举报
回复
int main(int argc, char* argv[])
{
int iNum = 0;
printf("Please Input the number:");
scanf("%d", &iNum);
int iTemp = iNum/2 + 1;
for (int i = 0; i < iTemp; i++)
{
printf("%d,%d\n", i, iNum-i);
}
return 0;
}
iatsbg
2007-09-01
打赏
举报
回复
我用递归写的,不会输出重复的数。
#include <stdio.h>
int nums[10000];
int count=0;
void Print()
{
int i;
for (i=0; i<count-1; ++i) printf("%d,",nums[i]);
printf("%d;", nums[i]);
}
void Cal(int sum, int min, int first)
{
int i;
for (i=min; sum-i>i; ++i)
{
nums[count++]=i;
Cal(sum-i, i+1, 0);
--count;
}
if (first) return;
nums[count++]=sum;
Print();
--count;
}
int main()
{
int sum;
scanf("%d", &sum);
Cal(sum, 1, 1);
}
RocheFoo
2007-09-01
打赏
举报
回复
jf
食人族哲学家
2007-09-01
打赏
举报
回复
貌似很容易,先算最大的加数个数,sum=1+2+3+4等等,直到输入数inputn-sum<n,这样n就是最大的加数个数,再使每个加数按升序排列,穷举就ok了.(当然,小于n个加数的也要算)
加载更多回复(6)
编程之法:面试和算法心得-样章.pdf
July 最新巨著 编程之法:面试和算法心得-样章.pdf 简介 本书涉及面试、算法、机器学习三个主题。书中的每道
编程题
目都给出了多种思路、多种解法,不断优化、逐层递进。本书第1章至第6章分别阐述字符串、数组、树、查找、动态规划、海量数据处理等相关的编程面试题和算法,第7章介绍机器学习的两个算法—K近邻和SVM。此外,每一章都有“举一反三”和“习题”,以便读者及时运用所学的方法解决相似的问题,且在附录中收录了语言、链表、概率等其他题型。书中的每
一道
题都是面试的高频题目,反复出现在最近5年各大公司的笔试和面试中,对面试备考有着极强的参考价值。 全书逻辑清晰、通俗易懂,适合热爱编程、算法、机器学习,以及准备IT笔试和面试,即将求职、找工作的读者阅读。 附:购买地址 http://www.epubit.com.cn/book/details/4051
字符串
编程题
一道
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截去半个,列如“人ABC”4应该截取为“人AB”,输入“人ABC们DEF”6,应该输出“人ABC”而不是“人ABC+半个们”。package cn.exercise.algorithmsTest;/** * 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被
用C语言如何编程
一道
选择题,使用C语言编写
一道
简单的
编程题
C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。C语言是世界上最流行、使用最广泛的高级程序设计语言之一。今天小编要为大家分享的一篇教程就是:使用C语言编写
一道
简单的
编程题
。选择原因在教程开始之前,小编先和大家说一下,为什么小编使用C语言来进行编写这道
编程题
吧。其中的一个原因就是因为C语言的功能比较齐全...
网易2018校招内推Android笔试
编程题
一道
题目: 输入一个数组,长度不超过2*10^5,数组元素为整数,大小不超过10^9,从第一个位置依次取元素并添加到新数组末尾,每取一次就逆序操作一次,直到取完所有元素。最后输出这个逆序操作多次后的新数组。 示例: 原数组:1 2 3 4 取1,逆序后还是1 取2后数组为1 2,逆序后是2 1 取3后数组为2 1 3,逆序后是3 1 2 取4后数组为3 1 2 4,逆序后是4 2 1 3
剑指Offer——迅雷笔试题+知识点总结
剑指Offer——迅雷笔试题+知识点总结情景回顾时间:2016.9.19 19:00-21:00地点:山东省网络环境智能计算技术重点实验室事件:迅雷笔试 总体来说,迅雷笔试内容体量不算多,主要分为30道选择题,2道
编程题
,半小时将选择题做完,1个半小时两道
编程题
一道
29%,
一道
超时。关键是第二道
编程题
直接输出错误语句居然通过17%!也是醉了,绝对的判题系统BUG。知识点回忆希尔排序 给定一数
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章