演算法學習之陣列和字串

2021-09-06 11:17:55 字數 2084 閱讀 7370

陣列和字串

逆序輸出

考慮問題:讀入一些整數,逆序輸出到一行中。已知整數不超過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 右移一位 ...