來自剛剛進入打卡工作的落後者的練習題——07
這次的打卡要複習以前的知識了,溫故而知新,可以為師矣! (就是為自己做題少找了個理由罷了) 我發現自己很多題都要問別人,以後要進行獨立思考,相信以後我能自己解決問題。加油! 言歸正傳,進入正題。 複習題開始:
第一題:列印楊輝三角(帶優化的)
#include <stdio.h> int main () { int i; int j; int k; int n; scanf ("%d",&n); for (i=0;i<n;i++) { for (k=n-i-1;k>0;k--) { printf (" "); } for (j=0;j<i+1;j++) { int sum; int up=1; int down=1; if (j==0) { printf ("1 "); } else { for (k=0;k<j;k++) { down*=(k+1); } for (k=i;k>i-j;k--) { up*=k; } sum=up/down; printf ("%d ",sum); } } printf ("\n"); } return 0; }
現在輸出的就是等腰三角形了。 基本思路還是用的高中的排列組合的方法,因為楊輝三角的特點就是: 楊輝三角形同時對應於二項式定理的係數.即為高中講的C几几 如果是第4行第3列,這個數是3,這個數的表示式就,32/12即為C3 2 下面就是我的思路(上次沒細說,這次補上)
1、先開始定義的i用來換行 2、後面的j則是代表這個數字是第幾位數字 3、經觀察發現當j=0時,不能進行Ci 0,但是第一列的數字都是1,所以,當j=0時,那麼輸出1,其他的位數就按正常的二項式定理的係數計演算法則進行計算 4、up是代表計算指的是分子上的數 5、down代表的是分母上的數 6、sum就是計算的這個位置上的數值
最後重點就是怎麼用i和j進行位置的判斷了
之後就是輸出了,輸出的要想是金字塔形的話,就和列印等腰三角形是相似的(一直讓我改,之前是不知道啊,現在總算是知道了)
第二題:查詢座位號 這個題的題目就不詳細寫了,太佔地方了 簡單描述一下題目: 1、輸入學號的個數n,分別輸入n行,每行有三個資料,學號 試機號 考試號 2、輸入查詢考試號的人數,輸入試機號,輸出相應的學號還有考試號
下面是程式碼:
#include <stdio.h> int main () { int n; scanf ("%d",&n); int i; int j; int Try[n]; int test[n]; long long number[n]; for (i=0;i<n;i++) { scanf ("%lld",&number[i]); scanf ("%d %d",&Try[i],&test[i]); } int m; scanf ("%d",&m); //m是要查詢的號人數 int a[m]; for (j=0;j<m;j++) { scanf ("%d",&a[j]); //n個要查詢的試機號 } for (j=0;j<m;j++) { for (i=0;i<n;i++) { if (a[j]==Try[i]) //當條件符合的時候,進行輸出 { printf ("%lld %d\n",number[i],test[i]); } } } return 0; }
上次為什麼錯誤,我到現在也不是太清楚,但是,能改正了 之前匹配試機號的程式碼是這樣的
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
if (Try[i]==a[j])
{
printf ("%lld %d\n",number[i],test[i]);
}
}
}
現在匹配試機號的程式碼是這樣的
for (j=0;j<m;j++)
{
for (i=0;i<n;i++)
{
if (a[j]==Try[i]) //當條件符合的時候,進行輸出
{
printf ("%lld %d\n",number[i],test[i]);
}
}
}
就僅僅是i和j的順序的問題,仔細看了之後,發現要找的東西是num[i]還有test[i],i的迴圈應該放在裡面。 所以之前的邏輯有問題。
就到這裡吧,長了沒人願意仔細看! 我還會繼續努力的,讓那些對我抱有期望的人不失望!