一个问题只要同时满足以下3个条件,就可以用递归来解决:
题目链接
代码:
#include
using namespace std;
void hanno(int n,char A,char B,char C)
{
if(n==1)
printf("Move disk %d from %c to %c\n",n,A,C);
else
{
hanno(n-1,A,C,B);
printf("Move disk %d from %c to %c\n",n,A,C);
hanno(n-1,B,A,C);
}
}
int main()
{
int n;
cin>>n;
hanno(n,'A','B','C');
}
题目链接
代码:
#include
using namespace std;
int pass(int s,int y)
{
if(s==0)
return y+1;
else
{
return 2*pass(s-1,y);
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
printf("%d\n",pass(n,m));
}
return 0;
}
题目链接
代码:
#include
using namespace std;
void qsort(int *a,int l,int r)
{
int i=l,j=r;
int k=a[l];
if(i>=j)
return ;
else
{
while(i<j)
{
while(i<j&&a[j]>=k) j--;
a[i]=a[j];
while(i<j&&a[i]<=k) i++;
a[j]=a[i];
}
a[i]=k;
qsort(a,l,i-1);
qsort(a,i+1,r);
}
}
int main()
{
int a[111111];
int n;
while(cin>>n)
{
int i;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
qsort(a,1,n);
for(i=1;i<=n;i++)
{
if(i==n)
printf("%d\n",a[i]);
else
printf("%d ",a[i]);
}
}
return 0;
}
题目链接
代码:
#include
using namespace std;
int erfen(int *a,int l,int r,int k)
{
int mid=(l+r)/2;
while(l<=r)
{
if(a[mid]==k)
return mid;
else if(a[mid]>k)
return erfen(a,l,mid-1,k);
else if(a[mid]<k)
return erfen(a,mid+1,r,k);
}
return -1;
}
int a[3000010];
int main()
{
ios::sync_with_stdio(false);
int n;
int i,k;
cin>>n;
for(i=1; i<=n; i++)
{
cin>>a[i];
}
int q;
cin>>q;
while(q--)
{
cin>>k;
printf("%d\n",erfen(a,1,n,k));
}
return 0;
}
题目链接
代码:
#include
using namespace std;
void perm(int *a,int k,int m)
{
int i;
if(k==m)
{
for(i=1; i<=m; i++)
{
if(i==m)
printf("%d\n",a[i]);
else
printf("%d,",a[i]);
}
}
else
{
for(i=k; i<=m; i++)
{
swap(a[k],a[i]);
perm(a,k+1,m);
swap(a[k],a[i]);
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int a[11];
int i;
for(i=1; i<=n; i++)
{
cin>>a[i];
}
perm(a,1,n);
}
return 0;
}
优质博客