畫數字統計長條圖的練習 (使用陣列)

看到題目時自己先撰寫一次,很燒腦~
輸入10組0~100之間的數字,畫出以10為區分的*長條圖。(0~10,10~20......90~100)
#include<stdio.h>
int main(){
int i,j,n[10]={0},star[10]={0};
for(i=1;i<=10;++i){
scanf("%d",&n[i-1]);
}
for(i=1;i<=10;++i){
int a=n[i-1];
for(j=1;j<=10;++j){
if(a>(j-1)*10 && a<=j*10){
star[j-1]++;
}
}
}
for(i=1;i<=10;++i){
printf("%3d: ",10*i);
for(j=1;j<=star[i-1];++j){
printf("*");
}
printf("\n");
}
return 0;
}
看完課程以後開始認為自己的不足,在給予條件時的思考模式太過笨拙了,重新理解知道了看條件的角度不同決定程度的不同,不過想必這也是成長的過程之一。
再把100區分為10分的範圍,一共有10個(0~10,11~20,21~30....),陣列相對於0~9一共10個區塊,輸入數字可除10的商數可以對應到陣列區塊,不過記得要減1,因為例如20/10=2,而陣列是從0(0~10)開始,故2就變成21~30的區間了,所以我們應該要把數值減1後再/10得其商數【 n[(30-1)/10]++ 】,這樣n[2]就會+1了(n[2]是數值在範圍21~30的計數統計),這樣可以對應到計數器n[ ]之中對應的位置。
#include<stdio.h>
int main(){
int t[10]={0};
int i,j,n;
for(i=1;i<=10;++i){
scanf("%d",&n);
t[(n-1)/10]++; //計數器
}
for(i=1;i<=10;++i){
printf("%3d: ",10*i);
for(j=1;j<=t[i-1];++j){ //這裡的j<=t[i-1]的j指的是*,t[i-1]則是讀取計數器內容值(若5印5個*)
printf("*"); //印**
}
printf("\n");
}
return 0;
}

在學習過程中雖然苦幹寫出來頗有成就感,但有其他更好的方式並去理解他就更有一種豁然開朗的感覺。
苦幹可以解決問題,但若理解後不僅可以解決問題,而且還是種高效率處裡的表現。
小技巧,10 20 30.. 90 100欲對齊可在%d中加3(%3d),在中間加數字是等於留3位元空間,可讓3位數對齊(當然4位數就是%4d嘍)。

留言