整数拆分问题(用堆栈方法) 谢谢

qq_41703984 2019-02-10 04:34:01

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_INTEGER 20

/*
整数拆分:输入一个1--20之间的整数,将其拆分成多个整数的和
例如:
5 = 1 + 1 + 1 + 1 + 1
5 = 2 + 1 + 1 + 1
5 = 2 + 2 + 1
5 = 3 + 1 + 1
5 = 3 + 2
5 = 4 + 1
5 = 5
*/
int main()
{
//整数拆分时需要用到的堆栈
int sumStack[MAX_INTEGER]; //各个加数的和的堆栈
int numStack[MAX_INTEGER]; //各个加数的堆栈
int top; //栈顶
int nn;
int ii;

while ( 1==1 )
{
for ( ii=0; ii<MAX_INTEGER; ii++ )
{
sumStack[ii]=0;
numStack[ii]=0;
}
top=0;
nn=0;
printf("nn = ");
scanf("%d", &nn);
if ( (nn<1) || (nn>MAX_INTEGER) )
return 1;

//缺失的代码





printf("end\n");
}
return 0;
}

/////////////////////////////


...全文
221 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-02-14
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <stdlib.h>
void print(int res[], int num) {
static int L=0;
L++;
printf("%8d:",L);
for (int i=0;i<num;++i) {
printf(" %d", res[i]);
}
printf("\n");
}
void split(int n, int m) {// n表示总数,m表示最大因子
static int res[100];// 保存结果
static int num=-1;// 当前因子下标

if (n<m || n<0 || m<1) return;
num++;
if (0==n) {// 递归终止条件,为0不可再分,直接输出
print(res,num+1);
num--;
return;
} else {
if (n==m) {// 不拆,直接输出
res[num]=m;
print(res,num+1);
num--;
} else {
// 拆分出第一个
res[num]=m;
n=n-m;

if (m>n) m = n; // 最大因子不可能大于总数

for (int i=m;i>=1;--i) {// 循环,第二个因子可以继续拆分,而且按照最大因子不同可以拆分成多个
split(n,i);
}
num--;
}
}
}
void Split(int n) {
if (n<=0) return;
if (100<n) {
printf("Up to 100\n");
return;
}
for (int i=n;i>=1;--i) {
split(n, i);
}
}
void main(int argc,char **argv) {
if (argc<=1) Split(5);
else if (argc>=3) split(atoi(argv[1]),atoi(argv[2]));
else Split(atoi(argv[1]));
}

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧