第1关:下楼问题
#include <iostream>
using namespace std;
/********** Begin **********/
int take[100];
//可以在此增加内容
void Print(int n)
{
for(int i=0;i<=n;i++)
cout<<take[i]<<" ";
cout<<endl;
}
void Try(int n,int s)
{
for(int j=3; j!=0; j--)
{
if(s < j)continue;
if(s == j)
{
take[n]=j;
Print(n);
}
if(s > j)
{
take[n++]=j;
Try(n,s-j);
n--;
}
}
}
void Move(int n)
{
//补充代码完成功能
Try(0,n);
}
/********** End **********/
第2关:字符全排列
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
/********** Begin **********/
char *in;
int len;
bool used[30];
char out[30];
void ranker(int n){
if(n==len){
cout<<out<<endl;
return;
}
for(int i=0;i<len;i++){
if(used[i]==1) continue;
else{
out[n++]=in[i];
used[i]=1;
ranker(n);
used[i]=0;
n--;
}
}
}
//可以在此自由增加函数
void Cal(char *str)
{
//补充代码完成功能
in=str;
len=strlen(in);
sort(str,str+len);
ranker(0);
}
/********** End **********/
第3关:分书问题
#include <iostream>
using namespace std;
/********** Begin **********/
int like[5][5],num=0,take[5],book[5]={0,0,0,0,0};
//可以在此增加其他内容
void Try(int n)
{
int i, j, k;
for (i = 0; i <= 4; i++) {
if (like[n][i] > 0 && book[i] == 0) {
take[n] = i;
book[i] = 1;
if (n == 4) {
num++;
for (k = 0; k <= 4; k++) {
printf("%d ", take[k] + 1);
}
printf("\n");
} else {
Try(n + 1);
}
book[i] = 0;
}
}
}
void Cal()
{
//补充代码完成功能
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
cin>>like[i][j];
}
}
Try(0);
}
/********** End **********/