|
发表于 2013-3-14 20:32:24
|
显示全部楼层
这道题的逻辑是蛮麻烦的,关键是要把信息递归打出来,琢磨了两天,终于搞定了
代码:
- #include<stdio.h>
- #include <conio.h>
- #include<stdlib.h>
- #include <iostream>
- #include<string>
- using namespace std;
- void analyze(int nNumber,int nCount,const char*szChar)
- {
- if (nNumber==1)
- {
- char szOut[256];
- sprintf_s(szOut,"%s+%d",szChar,1);
- cout<<szOut<<endl;
- }
- else
- {
- int nRepeat = nNumber < nCount ? nNumber:nCount;
-
- for (int i=1;i<=nRepeat;i++)
- {
- char szInfo[256];
- sprintf(szInfo,"%s+%d",szChar,i);
- if(nNumber-i)
- analyze(nNumber-i,i,szInfo);
- else
- {
- char szOut[256];
- sprintf_s(szOut,"%s+%d",szChar,i);
- cout<<szOut<<endl;
- }
- }
- }
-
- }
- void main(int argc, char **argv)
- {
- while (true)
- {
- int nNumber;
- cout << "请输入一个大于1的正整数:";
- cin >> nNumber;
- if (nNumber<=1)
- {
- cout << "输入有问题,请重新输入。"<<endl;
- }else
- {
- for (int i=1;i<nNumber;i++)
- {
- char szInfo[256];
- sprintf(szInfo,"%d=%d",nNumber,i);
- analyze(nNumber-i,i,szInfo);
- }
-
- }
-
- cout << "是否要继续程序(Y/N):";
- _flushall();
- int nTemp = _getch();
- if (nTemp==27 || nTemp==110 || nTemp==78)
- {
- return;
- }
- cout<<endl;
-
- }
-
- }
复制代码 运行结果:
|
|