演算法的樂趣c/c++ —— 1.1.3入門習題
阿新 • • 發佈:2018-12-26
宣告:摘選自“ 演算法競賽入門經典(第2版)”作者: 劉汝佳 / 陳鋒 ISBN:9787302291077
讀入一些整數,逆序輸出到一行中。已知整數不超過100個。如何編寫這個程式呢?首先是迴圈讀取輸入。讀入每個整數以後,應該做些什麼呢?思來想去,在所有整數全部讀完之前,似乎沒有其他事可做換句話說,只能把每個數都存下來存放在哪裡呢答案是:。。?陣列
#include<stdio.h> int a[110]; //定義陣列,大小為110 陣列放在外面是為了防止陣列定義過大時,在main函式裡面會導致異 //常退出 int main() { int input, i = 1; while(scanf("%d",&input) == 1) { a[i++] = input; if(input == 0) //以0為輸入結束符 { break; } } for(int j=i-2; j>=1; j--) { printf("%d",a[j]); //翻轉列印除0之外的所有元素 } return 0; }
開燈問題。有Ñ盞燈,編號為1〜n的。第1個人把所有燈開啟,第2個人按下所有編號為2的倍數的開關(這些燈將被關掉),第3個人按下所有編號為3的倍數的開關(其中關掉的燈將被開啟,開著的燈將被關閉),依此類推。一共有ķ個人,問最後有哪些燈開著?輸入ñ和K,輸出開著的燈的編號.k≤n≤1000。
樣例輸入:
7 3
樣例輸出:
1 5 6 7
#include<stdio.h> #include<string.h> int list[1010]; int main() { int n, k; scanf("%d%d", &n, &k); //定義輸入的兩個數字 memset(list, 0, sizeof(list)); //使用memset函式將陣列list全部置零,0表示燈處於關閉狀態 for(int i=1; i<=k; i++) //輸入多少人,迴圈多少次 { for(int j=1; j<=n; j++) //有多少盞燈,就對燈進行多少次操作 { if(j%i == 0) //如果餘數為0,則說明是第幾個人的倍數,就對燈進行取反操作 { list[j] = !list[j]; } } } for(int m=1; m<=n; m++) //迴圈讀取燈的狀態,如果為 1 即亮燈狀態 ,則列印燈的編號 { if(list[m]==1) { printf("%d", m); printf(" "); } } return 0; }