1.求4!+5!+6!。(蛮简单的)
代码:
#include <iostream>
using namespace std;
int Fac(int x){
int a = 1;
if(x==1){
a = 1;
}
else{
a = x*Fac(x-1);
}
return a;
}
int main(){
cout<<Fac(4)+Fac(5)+Fac(6)<<endl;
return 0;
}
2.求两数最大公约数。(辗转相除法)
#include <iostream>
using namespace std;
int Ayaka(int x,int y){
int a = 1;
if (x%y==0){
a=y;
}
else{
a = Ayaka(x,x%y);
}
return a;
}
int main(){
int a,b;
cin>>a>>b;
cout<<Ayaka(a,b)<<endl;
return 0;
}
3.全排列。
#include <iostream>
using namespace std;
void Ayaka(int x){
if(x==1){
printf("%d ",1);
}
else{
Ayaka(x-1),printf("%d ",x);
}
}
int main(){
int a;
cin>>a;
Ayaka(a);
return 0;
}
4.n皇后(写了好久,感动中国)
#include <bits/stdc++.h>
using namespace std;
int n,num;
int cross[11];
int righ[50];
int lee[50];
int m[10];
bool check(int x,int y){//x->line,y->cross,检查
bool a;
a=true;
int c,l,le,ri;
c=y,l=x,ri=x+y,le=y-x+n-1;
if(cross[c]||lee[le]||righ[ri]) a=false;
return a;
}
void show(){//呈现棋盘
for (int i = 0;i<n;i++){
for (int j = 0;j<n;j++){
if(j==m[i]){
cout<<'X';
}
else{
cout<<'O';
}
}
cout<<endl;
}
cout<<endl;
return;
}
void put(int x){//列举所有可能
if(x==1){
for (int i=0;i<n;i++){
if(check(x,i)){
m[x]=i;
cross[i]=1,lee[i-x+n-1]=1,righ[x+i]=1;
num++;
if(num==n) show();
cross[i]=0,lee[i-x+n-1]=0,righ[x+i]=0,num--;
}
}
}
else{
for (int i = 0;i<n;i++){
if(check(x,i)){
m[x]=i;
cross[i]=1,lee[i-x+n-1]=1,righ[x+i]=1,num++;
put(x-1);
cross[i]=0,lee[i-x+n-1]=0,righ[x+i]=0,num--;
}
}
}
return;
}
int main(){
cin>>n;
put(n);
return 0;
}