set,回溯;

在这里插入图片描述在这里插入代码片#include<bits/stdc++.h> using namespace std; int n; int s[11]={1,2,4,8,16,32,1,2,4,8}; int biao[11]; setvv; void arr(int shi,int fen,int sum){ if(sum==n){ char pp[10]; sprintf(pp,"%d:%.2d",shi,fen);//int sprintf(char *str, const char *format, …) 发送格式化输出到 str 所指向的字符串 vv.insert((string)pp); return; } for(int q=0;q<10;q++){ if(q>=4&&biao[q]==0&&(fen+s[q])<=59){ fen=fen+s[q]; biao[q]=1; arr(shi,fen,sum+1); biao[q]=0; fen=fen-s[q]; } else if(q<4&&biao[q]==0&&shi+s[q]<=11){ shi=shi+s[q]; biao[q]=1; arr(shi,fen,sum+1); biao[q]=0; shi=shi-s[q]; } } } int main(){ while(cin>>n){ memset(biao,0,sizeof(biao)); vv.clear(); arr(0,0,0); set::iterator it; for(it=vv.begin();it!=vv.end();it++){ cout<<*it<<endl; } } return 0; }