不拘一格程式設計序之二

2021-04-19 10:11:04 字數 1829 閱讀 3140

題目:乙個陣列int a[10],要求為每個元素隨機賦值0或者1,但是這10個元素不能全0,也不能全1。

方法一:隨機產生10個元素,如果都是0,或者都是1,就重新生成。

其中如何判斷都是0,還是都是1?

方法一.方法一:用變數n1標誌全0,n1=0表示非全0,n1=1表示全0。用變數n2標誌全1,n2=0表示非全1,n2=1表示全1.

int n1,n2;

n1 = 1;

n2 = 1;

for (int i=0; i<10; i++)

如果發現n1==1 || n2 == 1,那麼重新執行以上步驟

方法一.方法二:將a[i]的取值全部加起來,結果為0表示全0,結果為10表示全1。

int sum=0;

for (int i=0; i<10; i++)

如果發現sum==0||sum==10值需要重新執行。

重新執行又有多種表示方法

方法一.方法三:

label1:

n1 = 1;

n2 = 1;

for (int i=0; i<10; i++)

if (n1 == 1|| n2 == 1) goto lable1;

方法一.方法四:

n1=1;n2=1;

while (n1==1||n2==1)

} 方法一.方法五:

int sum=0;

while(sum=0 || sum==10)

} 方法二:重新生成隨機數太麻煩了,不如先隨機定位確定0的位置,再確定1的位置,然後隨機產生其它8個位置的數。

n1是0的位置,n2是1的位置。第一次隨機的n1有0~9一共10個位置,第二次則只有9個位置,

int n1,n2;

n1 = random(10);

n2=random(9);

if (n2 >= n1) n2++;   如果n1=3,n2=3,那麼n2其實是第4個。同理如果n1=3,n2=4,其實是第5個。

a[n1]=0;

a[n2]=1;

for (int i=0; i<10; i++)

方法三:與方法二思路相同,不同的是,先全面隨機生成10個數,如果全為0的話,再隨機選擇乙個位置生成1;如果全為1的話,在隨機選擇乙個位置生成0.

int n;

int sum=0;

for (int i=0; i<10; i++)

if (sum==0)

if (sum==10)

當然,上面的程式還可以改為:(把最後的判斷合一)。

int n;

int sum=0;

for (int i=0; i<10; i++)

if (sum==0 || sum == 10)

方法四:利用位運算,隨機產生乙個1~2

10-1之間的數,這個數乙個10位,而且每為不會全為0(全為0的數是0),也不會全為1(全為1的數是2

10-1),那麼將這個數的每一位的取值賦值到陣列a[i]中對應的元素去就可以了。

int u;

u = random(1023) + 1;   如果不加1,是0~1022之間,而我們需要1~1023之間。

for(int i=0; i<10;i++)

或者這樣:

int u;

u = random(1023) + 1;   如果不加1,是0~1022之間,而我們需要1~1023之間。

for(int i=0; i<10;i++)

當然,實際上還有更多的方法,而每種方法實現也有更多的表示方法,同學們在程式設計序的時候不要限制了自己的思維,不同的環境下,需要不同的方法。

不拘一格程式設計序 迴圈列印演算法

不拘一格程式設計序之一 迴圈列印演算法 中經常有人說某某將領打仗天馬行空,不拘一格,讓敵人防不勝防,比如 尋秦記 中的李牧 比如 大唐雙龍傳 中的寇少。程式設計序時也要有怎樣的思想,不能被條條框框所束縛,比如這個例子 例1 編寫乙個函式void fun int t 要求在螢幕上列印t個 號,其中t的...

C 實現設計模式應該不拘一格

如同每個人都有其個性一樣,每種開發語言也有自己的個性。專案中,我們固然可以機械地將一種語言的開發經驗套用到另一種語言,但效果不一定好,因為 語言有自己的短處 用短處去實現不僅費時費力,結果也不理想 語言有自己的長處 但為了沿用以前的經驗削足適履,沒有用到語言的精要,結果是暴殄天物 相信你也發現了,用...

變數取值交換的方法 不拘一格程式設計序之三

不拘一格程式設計序之三 變數取值交換演算法 題目 已知兩變數a和b,設計乙個演算法,交換a與b的值。方法1 最傳統,最廣泛,最著名的方法,增加乙個變數,如下 方法2 不增加第三個變數,交換a和b的值,如下 分析,設a和b的原始值為a,b 執行 變數a 變數b int a,b a b a a b a ...