#include<iostream>
#include<algorithm>//C++算法头文件
using namespace std;
int f(int x,int y)
{
if(x==3||y==4)
return 1;
return f(x+1,y)+f(x,y+1);
}
int main()
{
cout<<f(0,0)<<endl;
return 0;
}
/*注:关于递归的一些补充:
递归算法考虑时有三个方面:
1.函数的重复执行体是什么
2.函数的出口在哪里
3.函数要完成的功能是什么:主要体现在返回值的形式
不要用循环的思想去理解递归,否则会被绕进去。
*/
4.幻方填空
/*
按照STL文档的描述,next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。
*/
#include<iostream>
#include<algorithm>
using namespace std;
#include<vector>
int check(vector<int> arr)
{
int r1=29+arr[0]+arr[1];
int r2=11+arr[2]+arr[3]+arr[4];
int r3=9+arr[5]+arr[6]+arr[7];
int r4=16+arr[8]+arr[9];
int c1=25+arr[8]+arr[2];
int c2=15+arr[0]+arr[3]+arr[5];
int c3=11+arr[1]+arr[6]+arr[9];
int c4=14+arr[4]+arr[7];
int l=17+arr[3]+arr[6];
int r=24+arr[5]+arr[8];
if((r1==r2&&r2==r3&&r3==r4)&&(l==r)&&c1==c2&&c2==c3&&c3==c4)
{
cout<<arr[7];
}
}
int main()
{
int a[10]={2,3,4,5,6,7,8,10,12,14};
vector<int> arr;
for(int i=0;i<10;++i)
{
arr.push_back(a[i]);
}
do{
#include<iostream>
#include<algorithm>
using namespace std;
#include<vector>
void check(vector<int> arr)
{
int r1=29+arr[0]+arr[1];
int r2=11+arr[2]+arr[3]+arr[4];
int r3=9+arr[5]+arr[6]+arr[7];
int r4=16+arr[8]+arr[9];
int c1=25+arr[8]+arr[2];
int c2=15+arr[0]+arr[3]+arr[5];
int c3=11+arr[1]+arr[6]+arr[9];
int c4=14+arr[4]+arr[7];
int l=17+arr[3]+arr[6];
int r=24+arr[5]+arr[8];
if((r1==r2&&r2==r3&&r3==r4)&&(l==r)&&c1==c2&&c2==c3&&c3==c4)
{
cout<<arr[7];
}
}
int main()
{
int a[10]={2,3,4,5,6,7,8,10,12,14};
vector<int> arr;
for(int i=0;i<10;++i)
{
arr.push_back(a[i]);
}
do{
check(arr);
}
while(next_permutation(arr.begin(),arr.end()));
return 0;
}
5.带分数
#include<iostream>
#include<algorithm>
#include<array>
#include<string>
using namespace std;
int parse(array<int,9> arr,int pos,int len)
{
int ans=0;
int t=1;
for(int i=pos+len-1;i>=pos;--i)
{
ans+=arr[i]*t;
t*=10;
}
return ans;
}
int main()
{
int n,ans=0;
scanf("%d",&n);
array<int,9> a = {1,2,3,4,5,6,7,8,9};
do
{
for(int i=1;i<=7;++i)
{
int inta= parse(a,0,i);
if(inta >= n)
break;
for(int j=1;j<=9-i-1;++j)
{
int intb=parse(a,i,j);
int intc=parse(a,i+j,9-i-j);
if(intb%intc==0&&inta+intb/intc == n)
ans++;
}
}
} while (next_permutation(a.begin(),a.end()));
printf("%d\n",ans);
system("pause");
return 0;
}
//注:用array型的可能会不行,但是用string与vector<int>都可以,且用string需转为const char*,但是这个效率较快
6.猜字母
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string>
using namespace std;
int main(int argc, char const *argv[])
{
char arr[2014];
int num=0;
for (int j = 0; j < 106; j++)
{
for (int i = 0; i <19; i++)
{
arr[num++]='a'+i;//通过循环给arr数组赋值得到拼接的字符串
}
}
int len = 2014;
while (len!=1)
{
int k=0;
for (int i = 1; i < len; i+=2)
{
arr[k++]=arr[i];
}
len=k;//k记录的就是每次len的长度
}
cout<<arr[0];
return 0;
}
蓝桥杯2013-2018试题初试1.今年多少岁?#include<iostream>#include <algorithm>using namespace std;int main(){ int m[10],n[10],k[10]; for(int i=10;i<=30;i++) { int a=i*i*i; int b=a*i; int p=0,s=0; if(1000<