第二次作业
题意:从(0,0)走到(n-1,n-1)有多少钟走法,并且只能在右上三角走,只能
向右和下走!
#include<iostream> #include<string.h> using namespace std; int res,n; void dfs(int p,int q){ if(p>=n||q>=n) return ; if(p==n-1&&q==n-1) res++; else{ if(p+1<=q) dfs(p+1,q); if(p<=q+1) dfs(p,q+1); } } int main(){ cin>>n; res = 0; dfs(0,0); cout<<res<<endl; return 0; }
/*501.合并排序 (10分)
C时间限制:3000 毫秒 | C内存限制:3000 Kb
题目内容:
使用合并排序算法编程,对整数数组排序
输入描述
第一行输入元素个数,第二行输入要排序的数组
输出描述
排好序的数组
输入样例
7
2 5 4 1 3 7 6
输出样例
1 2 3 4 5 6 7
*/
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxn = 1e3+10; int a[maxn]; void paixu(int l,int mid,int r){ int L[maxn],R[maxn]; int ss=l; memset(L,0,sizeof(L)); memset(R,0,sizeof(R)); int j1=0,j2=0; for(int i=l;i<=mid;i++){ L[j1++] = a[i]; } for(int i=mid+1;i<=r;i++){ R[j2++] = a[i]; } int j =0,i=0 ; while(i<j1&&j<j2){ if(L[i]<R[j]){ a[l++] = L[i++]; } else{ a[l++] = R[j++]; } } while(i<j1) a[l++] = L[i++]; while(j<j2){ a[l++] = R[j++]; } l--; } void merge(int s,int e){ if(s==e) a[s]=a[e] ; else{ int mid = (s + e)/2; merge(s,mid); merge(mid+1,e); paixu(s,mid,e); } } int main(){ int n; cin>>n; for(int i=1;i<=n;i++) scanf("%d",&a[i]); merge(1,n); for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; }