跳到主要內容

發表文章

目前顯示的是有「Learn」標籤的文章

開燈問題(節約用電 隨手關燈)

題目描述 : 有n盞燈,編號為1~n,第1個人把所有燈打開,第2個人按下所有編號為2的倍數的開關(這些燈將被關掉),第3個人按下所有編號為3的倍數的開關(其中關掉的燈被打開, 開著燈將被關閉),依此類推。一共有k個人,問最後有哪些燈開著?( k <=n <=1000) input 7  3 output 1  5  6  7 -------------------------------------------------------------------------------------------------------------------------- #include<stdio.h> #include<string.h> #define maxn 1010 int a[maxn]; int main() { int n, k, first = 1; memset(a, 0, sizeof(a)); scanf_s("%d%d", &n, &k); for (int i = 1; i <= k; i++) for (int j = 1; j <= n; j++) if (j%i == 0)a[j] = !a[j];         for (int i = 1; i <= n; i++) if (a[i]){ if (first)first = 0; else printf(" "); printf("%d", i); }         printf("\n"); return 0; }

韓信點兵(今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?──《孫子算經》)

描述:         相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排、五人一排、七人一排地變換隊形,而他每次只掠一眼隊伍的排尾就知道總人數了。輸入3個非負整數a,b,c ,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(或報告無解)。已知總人數不小於10,不超過100 。 輸入             2  1  6         2  1  3 輸出         Case  1:  41         Case  2:  No  answer -------------------------------------------------------------------------------------------------------------------------- #include<stdio.h> #include<math.h> int main() { int a = 0, b = 0, c = 0; int Case = 0; while (scanf("%d %d %d", &a, &b, &c) == 3 && a != 0 && b != 0 && c != 0) { int x1 = 5*7, x2 = 3*7, x3 = 3*5, N = 0; for (; x1 % 3 != 1; x1 += x1); for (; x2 % 5 != 1; x2 += x2); for (; x3 % 7 != 1; x3 += x3); N = (x1 * a + x2 * b + x3 * c) % 105; printf("Case %...