您好,登錄后才能下訂單哦!
/*************** *環境 http://tool.lu/coderunner/ *解說: * 千燈問題一 每個人關的自己的倍數 ******************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define max 1000+10 int test1() { int i,j,n,k,first=0; int a[max]; int COUNT=0; n=1000;k=3; memset(a,0,sizeof(a)); //0代表關燈,1代表開燈 for(i=1;i<=k;i++) //k個人 for(j=1;j<=n;j++) //n個燈 if(j%i==0) a[j]=!a[j]; //取反,0變1,1變0,原來開變關,關變開 /*************** i=1 1000個全部置為1 i=2 2偶數倍全置相反 為0 i=3 3的倍數全部相反 編號 6 12 18 6的倍數轉了2次變為1 ******************/ for(i=1;i<=n;i++) //最后輸出a[i]的值就可以了 if(a[i]){printf("%d ", i); COUNT++;} printf(":::::%d ", COUNT); //不明白你的代碼里面first是干嘛用的 return 0; } int test2() {/*************** *環境 http://tool.lu/coderunner/ *解說: * 千燈問題二 關掉指定的倍數燈 * 簡單實現 不優化版本 ******************/ int i,j,n,k1,k2,first=0; int a[max]; int COUNT=0; n=1000;k1=3;k2=7; for(i=0;i<=n;i++) a[i]=i; for(i=0;i<=n;i++) if(a[i]%k1==0)a[i]=0; for(i=0;i<=n;i++) if(a[i]%k2==0)a[i]=0; for(i=1;i<=n;i++) if(a[i]){ COUNT++;} printf(":::::%d ", COUNT); //不明白你的代碼里面first是干嘛用的 return 0; } int main() { test1(); test2(); return 0; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。