#include<bits/stdc++.h>
#include <iostream>
using namespace std;
int a[10] = {0};
void aaa(int,int);
int main()
{
int n;
cin>>n;
aaa(n,0);
return 0;
}
void aaa(int n,int sum)
{
if(sum>=n)
{
for(int i = 0;i<sum;i++)
{
cout<<a[i];
}
cout<<endl;
return;
}
for(int i = 1;i<=n;i++)
{
a[sum] = i;
aaa(n,sum+1);
}
return;
}
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
int a[10] = {0};
int f[10] = {0};
void aaa(int,int);
int main()
{
int n;
cin>>n;
aaa(n,0);
return 0;
}
void aaa(int n,int sum)
{
if(sum>=n)
{
for(int i = 0;i<sum;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i = 1;i<=n;i++)
{
if(f[i]==0)
{
a[sum] = i;
f[i] = 1;
aaa(n,sum+1);
f[i] = 0;
}
}
return;
}
#include <iomanip>
#include <iostream>
using namespace std;
int a[10] = {0};
int f[10] = {0};
int b[10] = {0};
void aaa(int,int);
int main()
{
int n;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>b[i];
}
aaa(n,0);
return 0;
}
void aaa(int n,int sum)
{
if(sum>=n)
{
for(int i = 0;i<sum;i++)
{
cout<<setw(3)<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i = 1;i<=n;i++)
{
if(f[i]==0)
{
a[sum] = b[i];
f[i] = 1;
aaa(n,sum+1);
f[i] = 0;
}
}
return;
}
#include <iomanip>
#include <iostream>
using namespace std;
int a[10] = {0};
int f[10] = {0};
int r;
void aaa(int,int);
int main()
{
int n;
cin>>n>>r;
aaa(n,0);
return 0;
}
void aaa(int n,int sum)
{
if(sum>=r)
{
for(int i = 0;i<sum;i++)
{
cout<<setw(3)<<a[i]<<" ";
}
cout<<endl;
return;
}
for(int i = 1;i<=n;i++)
{
if(f[i]==0)
{
a[sum] = i;
f[i] = 1;
aaa(n,sum+1);
f[i] = 0;
}
}
return;
}
三个三位数
描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成 1:2:3的比例,试 求出所有满足条件的三个三位数。
例如:
三个三位数192,384,576满足以上条件。
输入
无。
输出
每行三个三位数,为满足条件的一种方案。这三个三位数按从小到大的方式给出,相邻两个数之间 用单个空格隔开。 请按照第一个三位数从小到大的顺序依次输出每种方案。
#include <iomanip>
#include <iostream>
using namespace std;
int a[10] = {0};
int f[10] = {0};
int b[510] = {0};
int summ = 0;
void aaa(int,int,int);
int main()
{
aaa(9,3,0);
for(int i = 0;i<summ;i++)
{
for(int j = i+1;j<summ;j++)
{
for(int k = j+1;k<summ;k++)
{
int a1,a2,a3,a11,a22,a33,a111,a222,a333;
a1 = b[i]/1%10;
a2 = b[i]/10%10;
a3 = b[i]/100%10;
a11 = b[j]/1%10;
a22 = b[j]/10%10;
a33 = b[j]/100%10;
a111 = b[k]/1%10;
a222 = b[k]/10%10;
a333 = b[k]/100%10;
int aa[10] = {0};
aa[a1]++;
aa[a2]++;
aa[a3]++;
aa[a11]++;
aa[a22]++;
aa[a33]++;
aa[a111]++;
aa[a222]++;
aa[a333]++;
bool f = true;
for(int i = 1;i<=9;i++)
{
if(aa[i]>1)
{
f = false;
break;
}
}
if(f==true)
{
if(b[i]*3==b[k]&&b[i]*2==b[j])
{
cout<<b[i]<<" "<<b[j]<<" "<<b[k]<<endl;
}
}
}
}
}
return 0;
}
void aaa(int n,int r,int sum)
{
if(sum>=r)
{
for(int i = 0;i<sum;i++)
{
b[summ] = b[summ]*10+a[i];
}
summ++;
return;
}
for(int i = 1;i<=n;i++)
{
if(f[i]==0)
{
a[sum] = i;
f[i] = 1;
aaa(9,3,sum+1);
f[i] = 0;
}
}
return;
}
特 殊 的 质 数 肋 骨
问 题 描 述
农 民 约 翰 的 母 牛 总 是 产 生 最 好 的 肋 骨 。 你 能 通 过 农 民 约 翰 和 美 国 农 业 部 标 记 在 每 根 肋 骨 上 的 数 字 认 出 它 们 。
农 民 约 翰 确 定 他 卖 给 买 方 的 是 真 正 的 质 数 肋 骨,是 因 为 从 右 边 开 始 切 下 肋 骨,每 次 还 剩 下 的 肋 骨 上 的 数 字 都 组 成 一 个 质 数 。
举 例 来 说:
全部肋骨上 的 数 字 7 3 3 1 是 质 数 ; 三 根 肋 骨 7 3 3 是 质 数 ; 二 根 肋 骨 7 3 是 质 数 ; 当 然,最 后 一 根 肋 骨 7 也 是 质 数 。 7 3 3 1 被 叫 做 长 度 4 的 特 殊 质 数 。
写 一 个 程 序 对 给 定 的 肋 骨 的 数 目 n ,求 出 所 有 的 特 殊 质 数 。 1 不 是 质 数 。
输 入 复 制
4
输 出 复 制
2 3 3 3
2 3 3 9
2 3 9 3
2 3 9 9
2 9 3 9
3 1 1 9
3 1 3 7
3 7 3 3
3 7 3 9
3 7 9 3
3 7 9 7
5 9 3 9
7 1 9 3
7 3 3 1
7 3 3 3
7 3 9 3
#include <iostream>
using namespace std;
int a[10] = {0};
int r;
void aaa(int,int);
bool zhishu(int);
int main()
{
int n = 9;
cin>>r;
aaa(n,0);
return 0;
}
void aaa(int n,int sum)
{
if(sum>=r)
{
int b = 0;
bool f = true;
for(int i = 0;i<sum;i++)
{
b = b*10+a[i];
if(zhishu(b)==false)
{
f = false;
break;
}
}
if(f==true) cout<<b<<endl;
return;
}
for(int i = 1;i<=n;i++)
{
a[sum] = i;
aaa(n,sum+1);
}
return;
}
bool zhishu(int n)
{
if(n==1) return false;
if(n==2) return true;
for(int i = 2;i<n;i++)
{
if(n%i==0) return false;
}
return true;
}
谷仓的保安
Farmer John给谷仓安装了一个新的安全系统,并且要给牛群中的每一个奶牛安排一个有效的密码。一个有效的密码 由 L (3≤L≤15)个小写字母(来自传统的拉丁字母集'a'...'z')组成,至少有一个元音('a', 'e', 'i', 'o', 或者 'u'),至少两个辅音 (除去元音以外的音节),并且有按字母表顺序出现的字母(例如,'abc'是有效的,而'bac'不是)
给定一个期望长度 L 和 C 个小写字母,写一个程序,打印出所有的长度为 L、能由这些字母组成的有效密码。密码必 须按字母表顺序打印出来,一行一个。
输入
第一行: 两个由空格分开的整数,L 和 C 。(3≤C≤26)
第二行: C 个空格分开的小写字母,密码是由这个字母集中 的字母来构建的。
输出
输出若干行,每一个输出行包括一个长度为 L 个字符的密 码(没有空格)。输出行必须按照字母顺序排列。
如果计算出超过 25000 个有效密码,你的程序只需输出前 25000 个有效密码,即使后面还存在有效密码。
输入复制
4 6
a t c i s w
输出复制
acis
acit
aciw
acst
acsw
actw
aist
aisw
aitw
astw
cist
cisw
citw
istw
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
char a[30] = {'\0'};
int f[30] = {0};
char b[30] = {'\0'};
int cnt = 0;
int c;
void aaa(int,int);
int main()
{
int l;
cin>>l>>c;
for(int i = 0;i<c;i++)
{
cin>>b[i];
}
sort(b+0,b+c);
aaa(l,0);
return 0;
}
void aaa(int l,int sum)
{
if(sum>=l)
{
if(cnt<25000)
{
bool fy = false;
for(int i = 0;i<l;i++)
{
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u')
{
fy = true;
break;
}
}
if(fy==false) return;
bool ff = false;
int cnt2 = 0;
for(int i = 0;i<l;i++)
{
if(a[i]!='a'&&a[i]!='e'&&a[i]!='i'&&a[i]!='o'&&a[i]!='u')
{
cnt2++;
}
if(cnt2==2)
{
ff = true;
break;
}
}
if(ff==false) return;
bool fyx = true;
for(int i = 0;i<l-1;i++)
{
if(a[i]>a[i+1])
{
fyx = false;
break;
}
}
if(fyx==false) return;
cnt++;
for(int i = 0;i<sum;i++)
{
cout<<a[i];
}
cout<<endl;
}
return;
}
for(int i = 0;i<c;i++)
{
if(f[i]==0)
{
a[sum] = b[i];
f[i] = 1;
aaa(l,sum+1);
f[i] = 0;
}
}
return;
}
#include <iostream>
using namespace std;
int a[50];
int f[50];
int cnt;
void aaa(int,int);
bool zhishu(int);
int main()
{
int n;
cin>>n;
cnt = 0;
aaa(n,0);
cout<<"total:"<<cnt;
return 0;
}
void aaa(int n,int sum)
{
if(sum>=n)
{
if(zhishu(a[n-1]+a[0])==true)
{
cnt++;
cout<<cnt<<":";
for(int i = 0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
}
for(int i = 1;i<=n;i++)
{
if(f[i]==0)
{
if(sum==0)
{
f[i] = 1;
a[sum] = i;
aaa(n,sum+1);
f[i] = 0;
}
else
{
if(zhishu(i+a[sum-1])==true)
{
f[i] = 1;
a[sum] = i;
aaa(n,sum+1);
f[i] = 0;
}
}
}
}
return;
}
bool zhishu(int n)
{
if(n==1) return false;
if(n==2) return true;
for(int i = 2;i<n;i++)
{
if(n%i==0) return false;
}
return true;
}
素数环2
从1∼n 这 n 个数,摆成一个环,个数字首尾相连,形成一个圆环,要求圆环上任意两个相邻的数字之和 都是一个素数,请编程输出符合条件的素数环。
输入
输入数据仅一行,包含一个正整数 n(n≤20)。
输出
输出数据最多包括 10 行,每行由 n 个整数组成,表示前十个符合条件的素数环(不 足十个时全部输出)。
所有素数环第一个元素必须是 1 ,且按照从小到大的顺序排列。
输入复制
6
输出复制
1 4 3 2 5 6
1 6 5 2 3 4
#include <iostream>
using namespace std;
int a[50];
int f[50];
void aaa(int,int);
bool zhishu(int);
int main()
{
int n;
cin>>n;
aaa(n,0);
return 0;
}
void aaa(int n,int sum)
{
if(sum>=n)
{
if(zhishu(a[n-1]+a[0])==true&&a[0]==1)
{
for(int i = 0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
}
for(int i = 1;i<=n;i++)
{
if(f[i]==0)
{
if(sum==0)
{
f[i] = 1;
a[sum] = i;
aaa(n,sum+1);
f[i] = 0;
}
else
{
if(zhishu(i+a[sum-1])==true)
{
f[i] = 1;
a[sum] = i;
aaa(n,sum+1);
f[i] = 0;
}
}
}
}
return;
}
bool zhishu(int n)
{
if(n==1) return false;
if(n==2) return true;
for(int i = 2;i<n;i++)
{
if(n%i==0) return false;
}
return true;
}