标签:
将一行数按杨辉三角的规则计算为一个数,已知最后那个数和三角形的高度,求最初的那行数。
开始我还在推算杨辉三角的公式,无奈数学渣渣本质暴露无遗。就放弃采用一次次计算的方法。后来竟然惊喜的发现自己的这种方法反而更快。可能是因为公式里有组合和阶乘的原因吧~~~~~
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 const int MAX_N=11; 6 int N; 7 int Ans; 8 int a[MAX_N],b[MAX_N],c[MAX_N]; 9 //还是无脑用next_permutation生成所有数字的排列,请大神指教 10 void solve() 11 { 12 13 int record; 14 for(int i=0;i<N;i++) 15 { 16 a[i]=i+1; 17 } 18 do{ 19 //先将初始数据每次变化的排列储存在b[i]里 20 for(int i=0;i<N;i++) 21 { 22 b[i]=a[i]; 23 } 24 int q=N; 25 //用这个循环的计算一次变化后数组的情况,直到只剩下最后的数字 26 while(q--) 27 { 28 for(int j=0;j<q;j++) 29 { 30 c[j]=b[j]+b[j+1]; 31 b[j]=c[j]; 32 } 33 record=b[0]; 34 } 35 if(record==Ans) 36 { 37 for(int i=0;i<N;i++) 38 { 39 if(i==N-1) 40 { 41 printf("%d\n",a[i]); 42 } 43 else 44 { 45 printf("%d ",a[i]); 46 } 47 } 48 break; 49 } 50 }while(next_permutation(a,a+N)); 51 } 52 53 int main() 54 { 55 scanf("%d%d",&N,&Ans); 56 solve(); 57 return 0; 58 }
标签:
原文地址:http://www.cnblogs.com/xlsryj/p/4738626.html