全部排列问题
#include<bits/stdc++.h>
using namespace std;
void f(int);
int a[1000];
int s=0;
int n;
int main()
{
system("color 1");
cin>>n;
f(n);
return 0;
}
void f(int n){
if(s>=n){
for(int i=0;i<s;i++){
cout<<a[i];
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
a[s++]=i;
f(n);
}
return;
}
全排列的结果
#include<bits/stdc++.h>
using namespace std;
void f(int);
int a[1000];
int s=0;
int x[10];
int n;
int main()
{
system("color 1");
cin>>n;
f(n);
return 0;
}
void f(int n){
if(s>=n){
for(int i=0;i<s;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(x[i]==0){
a[s++]=i;
x[i]=1;
f(n);
x[i]=0;
}
}
return;
}
n个数的全排列
#include<bits/stdc++.h>
using namespace std;
void f(int);
int a[1000],b[10];
int s=0;
int x[10];
int n;
int main()
{
system("color 1");
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
f(n);
return 0;
}
void f(int n){
if(s>=n){
for(int i=0;i<s;i++){
cout<<setw(3)<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(x[i]==0){
a[s++]=b[i];
x[i]=1;
f(n);
x[i]=0;
}
}
return;
}
n个数取出r个数排列
#include<bits/stdc++.h>
using namespace std;
void f(int);
int a[1000],b[10];
int s=0;
int m;
int x[10];
int n;
int main()
{
system("color 1");
cin>>n;
cin>>m;
f(n);
return 0;
}
void f(int n){
if(s>=m){
for(int i=0;i<s;i++){
cout<<setw(3)<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(x[i]==0){
a[s++]=i;
x[i]=1;
f(n);
x[i]=0;
}
}
return;
}
三个三位数不会
特殊的肋骨质数不会
谷仓的保安
#include<bits/stdc++.h>
using namespace std;
void f(int,int),o(int);
int a[200];
char x[200],y[200];
bool c[200];
int n,m;
int main()
{
system("color 1");
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>x[i];
}
sort(x+0,x+n);
f(m,0);
return 0;
}
void f(int s,int k){
if(k>s-1){
if(o(s)==true){
for(int i=0;i<s;i++){
cout<<x[i];
}
cout<<endl;
}
return;
}
for(int i=0;i<n;i++){
if(c[i]==0){
if(k==0){
c[i]=1;
y[k]=x[i];
f(s,k+1);
c[i]=0;
}
else if(y[k-1]<x[i]){
y[k]=x[i];
f(s,k+1);
c[i]=0;
}
}
}
return;
}
void o(int s){
int cnt=0;
bool z=false;
for(int i=0;i<s;i++){
if(y[i]=='a'||y[i]=='e'||y[i]=='i'||y[i]=='o'||y[i]=='u'){
z=true;
break;
}
else cnt++;
}
if(z==true&&cnt>=2) return true;
else return false;
}
素数环
素数环2
简单单词接龙
#include<bits/stdc++.h>
using namespace std;
void f(int,int);
int n,cnt=0;
string a[100],c[100];
bool b[100];
int main()
{
system("color 1");
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
f(n,0);
cout<<cnt;
return 0;
}
void f(int n,int k){
if(k>n){
return;
}
for(int i=0;i<n;i++){
if(k==0&&b[i]==0){
c[k]=a[i];
b[i]=1;
cnt=max(cnt,k+1);
f(n,k+1);
b[i]=0;
}
else if(c[k-1][1]==a[i][0]&&b[i]==0){
c[k]=a[i];
b[i]=1;
cnt=max(cnt,k+1);
f(n,k+1);
b[i]=0;
}
}
return;
}
单词接龙的最长长度 不会
和为T
#include<bits/stdc++.h>
using namespace std;
void f(int,int,int);
int n,m,cnt=0;
int a[100],c[100];
int main()
{
system("color 1");
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
cin>>m;
f(n,0,0);
return 0;
}
void f(int n,int k,int cnt){
if(k>n-1) return;
if(cnt==m){
for(int i=0;i<k;i++){
if(c[i]!=0){
cout<<c[i]<<" ";
}
}
cout<<endl;
return;
}
c[k]=a[k];
f(n,k+1,cnt+a[k]);
c[k]=0;
f(n,k+1,cnt);
return;
}