《C語言程式設計》作業4-迴圈結構2
1057 XTU方陣
1、 題目分析
這是一個比較典型的圖形輸出題目,在期末考試中必定會考一道這種型別的圖形輸出題,對於圖形輸出題目,往往都是通過尋找圖形構造的規律來實現輸出。在此題中,可以發現以下規律,當n=1時,圖形共3(13)行,每行1(與n相等)個xtu;當n=2時,圖形共6(23)行,每行2(n)個xtu;由此,可以發現規律,輸入一個n,就會有3*n行輸出,每行n個xtu。找出規律以後,用程式碼實現輸出就好了。別忘記圖形之間有一個空行哦。
2、參考程式碼
#include<stdio.h> int main() { int i,j,n,k=1; //k用來記錄圖形是第幾個,便於進行輸出Case while(scanf("%d",&n)!=EOF) //實現多樣例 { if(n==0) break; //0是輸入結束標誌 printf("Case %d:\n",k); //圖形要求有case的輸出 for(i=0;i<3*n;i++) //控制行,共有3*n行 { for(j=0;j<n;j++) //控制每行有幾個xtu,每行共n個xtu { printf("XTU"); } printf("\n"); //輸出一行就要換行 } printf("\n"); //圖形之間有一個空行別忘記了 k++; //圖形是第幾個的計數器 } return 0; }
1077 數字塔
1、 題目分析
這個題也是一個圖形輸出題,主要也是找規律。我們用i表示行數,用j表示列數,括號裡是在解釋數字內在規律。當輸出一個n以後。n=2時: 圖形共有2(與n相同)行,第1(i=1)行有1(n-i)個空格,輸出1(與i相同)個1,第2(i=2)行有0(n-i)個空格,輸出3(2i-1)個2; 當n=3時 圖形共有3(與n相同)行,第1(i=1)行有2(n-i)個空格,輸出1(2i-1)個1(與i相同),第2(i=2)行有1(n-i)個空格,輸出3(2i-1)個2(與i相同),第3(i=3)行有0(n-i)個空格,輸出了5(2i-1)個3(與i相同).
2、參考程式碼
#include<stdio.h> int main() { int i,j,k,m,n; k=1; while(scanf("%d",&n)!=EOF) //多樣例的輸入 { if(n==0) break; //n為0時需要結束 printf("case %d:\n",k); //圖形是第幾個 for(i=1;i<=n;i++) //控制行數 { for(j=1;j<=n-i;j++) //圖形空格的規律 { printf(" "); } for(j=1;j<=2*i-1;j++) //圖形輸出的每行內容的規律 { printf("%d",i); } printf("\n"); //輸出完一行就得記得換行 } k++; } return 0; }
1078 字母三角形
1、 題目分析
這個題是一個標準的圖形輸出題,解答此類題往往都是需要通過採取尋找規律的方式,在找到規律後,我們常常可以採取依次輸出的方式來解決問題。在這個題目中,每行可以先考慮輸出前半部分,即輸出由字母’A’到輸入的字母。再考慮每行輸入由輸入的字母到“A”.這是一種比較實用的技巧,即分而治之,一點點完成,一點點考慮。
2、參考程式碼
#include<stdio.h> int main() { int i,j,k,m,n; m=1; //記錄圖形是第幾個 char a,c; while(scanf(" %c",&c)!=EOF&&c!='#') //多樣例輸入且不為 # { printf("case %d:\n",m); //輸出圖形是第幾個 k=c-64; //由規律可知行的數目等於字母在字母表中的位置(第幾個字母) for(i=k;i>=1;i--) { for(j=0;j<k-i;j++) //空格輸出 { printf(" "); } for(a='A';a<='A'+i-1;a++) //先輸出從‘A’到c所代表字母的部分 { printf("%c",a); } for(a=a-2;a>='A';a--) //再輸出從c所代表的字母到‘A’的部分 { printf("%c",a); } printf("\n"); //輸完一行就換個行 } m++; } return 0; }
1112 三點共線
1、 題目分析
高中數學知識的考察,判斷三點共線的方法可以用向量的思考方式,但是為了避免出現分母為0的情況,我們將除變為乘好了。
2、參考程式碼
#include<stdio.h>
int main()
{
int x[3];
int y[3];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&x[0],&y[0]);
scanf("%d %d",&x[1],&y[1]);
scanf("%d %d",&x[2],&y[2]);
if((y[1]-y[0])*(x[2]-x[0])==(y[2]-y[0])*(x[1]-x[0]))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
1113 區間相交
1、 題目分析
在判斷區間相交的時候,細細分析一下可知,【a,b】與【c,d】不相交的時候必然有c>b或者a>d;其餘情況則必為相交的情況。
2、參考程式碼
#include<stdio.h>
int main()
{
int x[2],y[2];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d %d",&x[0],&y[0]);
scanf("%d %d",&x[1],&y[1]);
if((x[1]>y[0])||(x[0]>y[1]))
{
printf("No\n");
}
else
{
printf("Yes\n");
}
}
return 0;
}
1118 方程的根
1、 題目分析
這個題目的話難度不是很大,主要就是考察了我們高中數學裡函式係數分類討論的知識,做題的時候需要注意的就是儘量要把所有的情況都得考慮進去,否則就會因為不嚴謹而出錯。
2、參考程式碼
#include<stdio.h>
int main()
{
int k,m,a,b,c;
scanf("%d",&k);
while(k--)
{
scanf("%d %d %d",&a,&b,&c);
if(a==0)
{
if(b==0) //常數函式
{
if(c==0) //a,b,c均為0時有無窮個解
{
printf("INF\n");
}
else //a,b為0而c不為0則沒有解
{
printf("0\n");
}
}
else //一元一次函式僅有一個解
{
printf("1\n");
}
}
else //一元二次函式
{
m=b*b-4*a*c; //計算表示式
if(m>0) printf("2\n");
else if(m==0) printf("1\n");
else printf("0\n");
}
}
return 0;
}
1189 Root
1、 題目分析
對這個題目來說,它的難度相對較大,難處就在於很容易缺少考慮某些情況,但是隻要始終把握好計算過程中分母不為0和且最終解必須為非負整數這兩點去做就好了。不然可能就會出錯,僅僅就是因為自己缺少考慮了一些特殊的情況。
2、參考程式碼
#include<stdio.h>
int main()
{
int k,a,b,c,r,m,n,d,x;
scanf("%d",&k);
while(k--)
{
scanf("%d %d %d",&a,&b,&c);
m=a-b*c;
n=c-1;
if(c==0)
{
if(a==0&&b!=0) printf("0\n");
else printf("None\n");
}
else if(c==1)
{
if(a!=b) printf("None\n");
else if(a==0) printf("1\n");
else printf("0\n");
}
else
{
d=m*n;
r=m%n;
x=m/n;
if(m==0&&b!=0) printf("0\n");
else if(x<0) printf("None\n");
else if(r==0)
{
if(x!=(-b)) printf("%d\n",x);
else printf("None\n");
}
else printf("None\n");
}
}
return 0;
}
1255 勾股數
1、 題目分析
做這個題目的時候我們首先需要注意的一點就是這是一個三角形,那麼我們三邊就必須要滿足三邊關係,即兩邊之和大於第三邊,通過採取有效區間內的元素搜尋法,可以從小到大依次尋找,當找到一條滿足勾股定理的邊時,就立馬結束搜尋直接輸出,這時找到的邊毫無疑問就是滿足條件的最小邊。
2、參考程式碼
#include<stdio.h>
int main()
{
int x,y; //接收兩條邊的變數
int i,k;
scanf("%d",&k); //讀入樣例的個數
while(k--)
{
scanf("%d %d",&x,&y);
for(i=1;i<x+y;i++) //區間搜尋法,在x+y內進行搜尋,但不可以為x+y,三角形的三邊關係要求的
{
if((i*i+x*x==y*y)||(i*i+y*y==x*x)||(x*x+y*y==i*i)) //進行判斷,如果邊長滿足條件,那麼就結束搜尋,因為我們要找的是滿足條件的最小邊
{
break;
}
}
if(i==(x+y)) printf("None\n"); //當搜尋結束後如果都沒找到合適的邊,那就意味著不存在合適邊
else printf("%d\n",i); //搜尋到了合適的邊直接輸出好了
}
return 0;
}