陣列和字串
逆序輸出
考慮問題:讀入一些整數,逆序輸出到一行中。已知整數不超過100個。
我們把每個數都存下來,存放到**呢?答案是:陣列。
#include #include#define maxn 100+10
inta[maxn];
intmain()
for(i = n-1;i>=1;i--)
printf(
"%d\n
",a[0
]); getch();
return0;
}
逆序輸出。
開燈問題
有n盞燈,編號為1~n。第乙個人把所有燈開啟,第二個人按下所有編號為2的倍數的開關(這些燈將被關掉),第三個人按下所有編號為3的倍數的開關。
(其中關掉的燈將被開啟,開著的燈將被關閉),依次類推。一共有k個人,問最後有哪些燈開著?
輸入:n和k,輸出開著的燈編號。k<=n<=1000。
樣例輸入:7 3
樣例輸出:1 5 6 7
分析:用a[1],a[2],...,a[n]表示編號為1,2,3,...,n的燈是否開著。模擬這些操作即可。
#include #include#include
#define maxn 1000+10
inta[maxn];
intmain()}}
for(i=1;i<=n;i++)
else
printf("%d
",i);//
輸出亮著的燈
} }
getch();
return0;
}
蛇形填數
在n*n方陣裡填入1,2,...,n*n,要求填成蛇形。例如n=4時方陣為:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方陣中,多餘的空格只是為了便於觀察規律,不必嚴格輸出。n<=8。
分析:二維陣列解決之。下,左,上,右,下...
#include #include#include
#define maxn 10
int a[maxn][maxn];//
定義二維陣列
intmain()
while(y-1>=0&&!a[x][y-1
])
while(x-1>=0&&!a[x-1
][y])
while(y+11])
}for(x = 0;x)
printf("\n
");}
getch();
return
0;應有編號,之後應有乙個空行。最後輸出解得總數。
}
小結:判斷是關鍵,這裡的迴圈處理很妙,判斷更妙。跟著迴圈走一遍,分析一遍,發現剛好執行了n*n次,不多不少。
演算法的效率非常的高。
字元陣列。
豎式問題
找出所有形如abc*de的算式,所有數字都屬於乙個特定的數字集合。輸入數字集合(相鄰數字之間沒有空格),輸出所有豎式。
每個豎式前應有編號,之後應有乙個空行。最後輸出解的總數。
分析:嘗試所有的abc和de,判斷是否滿足條件。c語言中的字元型用關鍵字char表示。儲存的是字元的ascii碼。
scanf("%s",s)和scanf("%d",&n)類似,它會讀入乙個不含空格、tab和回車符的字串,存入字元陣列s。注意,s前面沒有&符號。
printf輸出到螢幕,fprintf輸出到檔案,sprintf輸出到字串。
#include #include#include
intmain()
}//判斷所有的是否符合
if(ok)}}
printf(
"the number of solutions = %d\n
",count);
getch();
return0;
}
小結:作者很強大,太有才了。佩服。
未完待續...
演算法學習之陣列和字串
陣列和字串 逆序輸出 考慮問題 讀入一些整數,逆序輸出到一行中。已知整數不超過100個。我們把每個數都存下來,存放到 呢?答案是 陣列。include include define maxn 100 10 inta maxn intmain for i n 1 i 1 i printf d n a ...
演算法學習之字串全排列
第一種方法字串全排列,思想上和我們高中學的排列一樣,比如123,開始的時候第乙個位置有三種選擇,第乙個選完之後第二個位置就只剩下兩種選擇,第三個位置,就剩一種,所以一共有n 種排列,所以我們可以用遞迴的思想去做,遞迴中做交換 include include define max 50 void sw...
演算法學習之字串左移 右移
1.設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求時間複雜度為o n 且只允許使用兩個附加變數。方法一 每次將陣列中的元素右移一位,迴圈k次,則實現了右移k位。例如,原始字串 abcd1234 右移一位 4abcd123 右移一位 34abcd12 右移一位 234abcd1 右移一位 ...