|
#1
| |||
| |||
| [問題][C&C++] 樂透機(已解決) 選擇大樂透(6/49)或小樂透(6/42),亂數選出6個不同號碼,並排序選出之6個號碼(由小至大)。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char *argv[]) { int B_S,MaxNum,I,J,TempRand,lotto[6]; srand(time(NULL)); printf("0.exit\n"); printf("1.Big Lotto (6/49)\n"); printf("2.Small Lotto (6/42)\n"); printf("Your Choice : "); scanf("%d",&B_S); switch(B_S){ case 1: printf("\nYour Choice is Big Lotto\n"); MaxNum=49; break ; case 2: printf("\nYour Choice is Small Lotto\n"); MaxNum=42; break ; default : return 0 ; } printf("\nThe UnSort Lotto Numbers are:"); //--------------亂數取6個值 但是不重複-------------- for(I=0;I<6;I++){ do{ TempRand=(rand()%MaxNum)+1; for(J=0;J<I;J++){ if(TempRand==lotto[J]) break; } } while (TempRand==lotto[J]); lotto[i]=TempRand; printf(" %d,",lotto[i]); } printf("\n"); //--------------排序-------------------- for(J=5;J>0;J--){ for(I=0;I<J;I++){ if(lotto[i]>lotto[I+1]){ TempRand=lotto[i]; lotto[i]=lotto[I+1]; lotto[I+1]=TempRand; } } } //--------------------------------------- printf("\nThe Sorted Lotto Numbers are:"); for(I=0;I<6;I++){ printf(" %d,",lotto[i]); } printf("\n\n"); system("PAUSE"); return 0; } 這是我們老師寫的 0.exit 1.Big Lotto (6/49) 2.Small Lotto (6/42) 執行結果 大樂透 UnSort Lotto Number are:28.25.49.7.29.36 Sort Lotto Number are:7.25.28.29.36.49 Press any key to continue 執行結果 小樂透 UnSort Lotto Number are:25.42.22.35.34.32 Sort Lotto Number are:22.25.32.34.35.42 Press any key to continue 要怎麼讓這個程式繼續執行呢???因為執行ㄧ次就跳回程式了...... 知道的人幫忙ㄧ下,謝謝.....這個程式是請人幫忙寫的,但我忘了跟他說要回圈......
__________________ 愛你毆!!! 此文章於 2005-12-20 02:07 AM 被 warjod 編輯. |
|
#2
| |||
| |||
| for(i=0;i<6;i++);{ for 後面的分號不要 就可以了 |
|
#3
| |||
| |||
| for(i=0;i<6;i++);{ 刪除 ; lotto[i]=1+(int)42.0*(rand()/(RAND_MAX+1.0)); printf("%d\n",lotto[i]); } 此文章於 2005-11-28 08:42 PM 被 cwhung 編輯. |
|
#4
| |||
| |||
| 嗯~~我有點好奇為什麼那段產生亂數的程式碼不會產生重複的數字!? 不知道這個程式是用什麼compile的!?我用Turbo C++和Dev-C++都會產生問題說。 Dev-C++裡好像沒有clrscr()和randomize()兩個函式。有人知道是放哪裡嗎!?
__________________ 掬一把人間淨土,造千年人間仙境 |
|
#5
| ||||
| ||||
| 代碼: #include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
#define vsize 6
int _tmain(int argc, _TCHAR* argv[])
{
int lotter[vsize]= { 0 } , rvalue,cvaluea;
srand ((unsigned)time(NULL));
for ( cvaluea=0 ; cvaluea < 6 ; cvaluea++)
{
lotter[cvaluea]=rand()%42+1;
for(int cvalueb=0; cvalueb < cvaluea ; cvalueb++)
{
if(lotter[cvaluea]==lotter[cvalueb])
{
lotter[cvaluea]=0;
cvaluea=cvaluea-1;
}
}
}
for (cvaluea-- ;cvaluea>=0 ; cvaluea--)
{
cout << lotter[cvaluea] << endl;
}
system("pause");
}
幫人家寫的..(對方急著交作業=_="" ) ----------------------------------------------------------------- for(int cvalueb=0; cvalueb < cvaluea ; cvalueb++) { if(lotter[cvaluea]==lotter[cvalueb]) { lotter[cvaluea]=0; cvaluea=cvaluea-1; } } ----------------------------------------------------------------- 這一段是我不會讓她數字重複的原因 此文章於 2005-11-29 07:47 AM 被 vxr 編輯. |
|
#6
| |||
| |||
| 嗯~~小弟是寫這個樣子,年代久遠,自己看上去也有些怪怪的。跟vxr的想法應該有些類似的。 會先產生一個號碼,然後其他號碼再依序比較(先產生第一個號碼好像沒太大的意義...) 代碼: /* Get first random seed */
lotto[0] = rand() % 42 + 1;
/* Generate the rest lucky nums */
for(i=1;i<6;i++)
{
temp = rand() % 42 + 1;
for(j=0;j<index;j++)
{
if(lotto[j]==temp)
{
temp = rand() % 42 + 1;
} else {
continue;
}
}
lotto[i] = temp;
index++;
}
__________________ 掬一把人間淨土,造千年人間仙境 |
|
#7
| ||||
| ||||
| 引用:
|
|
#8
| |||
| |||
| 嗯嗯~~只有核心的code。 這寫得太失敗了,不敢全PO上來~~XD~~ 哪天改寫完再弄上來好了~~
__________________ 掬一把人間淨土,造千年人間仙境 |
|
#9
| |||
| |||
| 這是我之前在 linux 上寫的 我最主要是著重在分析數字的分布 因為我老婆之前看電視開獎 她說 "為什麼開出來的數字 一定有連號的 台北銀行一定有作弊" 所以就寫了這個程式: 代碼: #include <stdio.h>
#define MAX_NUMBER 49
char *sumstr[] =
{
"6 ",
"5 ",
"4 ",
"4-2 ",
"3 ",
"3-3 ",
"3-2 ",
"2 ",
"2-2 ",
"2-2-2",
"0 "
};
char number[14000000][7];
int sum[20];
int fnCheckRepeat(char *num)
{
int i, j;
for (i=0; i<5; i++)
for (j=i+1; j<6; j++)
if (*(num+i) == *(num+j))
return 1;
return 0;
}
unsigned long fnGenerateNumber()
{
unsigned long index;
char n[7];
int i;
for (i=0; i<6; i++)
n[i] = i + 1;
n[6] = 0;
strcpy(number[0], n);
index = 1;
while ( 1 )
{
n[5]++;
if (n[5] > MAX_NUMBER)
{
n[4]++;
n[5] = n[4];
if (n[4] > MAX_NUMBER)
{
n[3]++;
n[5] = n[4] = n[3];
if (n[3] > MAX_NUMBER)
{
n[2]++;
n[5] = n[4] = n[3] = n[2];
if (n[2] > MAX_NUMBER)
{
n[1]++;
n[5] = n[4] = n[3] = n[2] = n[1];
if (n[1] > MAX_NUMBER)
{
n[0]++;
n[5] = n[4] = n[3] = n[2] = n[1] = n[0];
if (n[0] > MAX_NUMBER)
return index;
}
}
}
}
}
if ( fnCheckRepeat(n) )
continue;
strcpy(number[index], n);
index++;
}
return 0;
}
void fnAnalysisNumber(unsigned long total)
{
int result[32];
unsigned long i;
char r;
int j;
for (j=0; j<32; j++)
result[j] = 0;
for (i=0; i<total; i++)
{
r = 0;
for (j=0; j<5; j++)
if ((number[i][j+1]-number[i][j]) == 1)
r |= 1 << (4 - j);
result[r]++;
}
printf("Number analysis:\n");
j = result[0x1F];
printf(" 6 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x0F] + result[0x1E];
printf(" 5 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x07] + result[0x0E] + result[0x1C];
printf(" 4 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x17] + result[0x1D];
printf(" 4-2 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x03] + result[0x06] + result[0x0C] + result[0x18];
printf(" 3 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x1B];
printf(" 3-3 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x0B] + result[0x0D] + result[0x13] + result[0x16] + result[0x19] + result[0x1A];
printf(" 3-2 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x01] + result[0x02] + result[0x04] + result[0x08] + result[0x10];
printf(" 2 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x05] + result[0x09] + result[0x0A] + result[0x11] + result[0x12] + result[0x14];
printf(" 2-2 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x15];
printf(" 2-2-2 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
j = result[0x00];
printf(" 0 ==> %7ld ( %6.3f )\n", j, (double)j/total*100);
printf("\n\n");
}
void fnPrintNumber(unsigned long index)
{
int i;
char r;
r = 0;
for (i=0; i<5; i++)
if ((number[index][i+1]-number[index][i]) == 1)
r |= 1 << (4 - i);
switch ( r )
{
case 0x1F: sum[0]++; break; // 11111
case 0x0F: // 01111
case 0x1E: sum[1]++; break; // 11110
case 0x07: // 00111
case 0x0E: // 01110
case 0x1C: sum[2]++; break; // 11100
case 0x17: // 10111
case 0x1D: sum[3]++; break; // 11101
case 0x03: // 00011
case 0x06: // 00110
case 0x0C: // 01100
case 0x18: sum[4]++; break; // 11000
case 0x1B: sum[5]++; break; // 11011
case 0x0B: // 01011
case 0x0D: // 01101
case 0x13: // 10011
case 0x16: // 10110
case 0x19: // 11001
case 0x1A: sum[6]++; break; // 11010
case 0x01: // 00001
case 0x02: // 00010
case 0x04: // 00100
case 0x08: // 01000
case 0x10: sum[7]++; break; // 10000
case 0x05: // 00101
case 0x09: // 01001
case 0x0A: // 01010
case 0x11: // 10001
case 0x12: // 10010
case 0x14: sum[8]++; break; // 10100
case 0x15: sum[9]++; break; // 10101
case 0x00: sum[10]++; break; // 00000
}
printf("%10d ==>", index);
for (i=0; i<6; i++)
printf(" %2d", number[index][i]);
printf(" ==> ");
switch ( r )
{
case 0x1F: printf(" 6"); break; // 11111
case 0x0F: // 01111
case 0x1E: printf(" 5"); break; // 11110
case 0x07: // 00111
case 0x0E: // 01110
case 0x1C: printf(" 4"); break; // 11100
case 0x17: // 10111
case 0x1D: printf(" 4-2"); break; // 11101
case 0x03: // 00011
case 0x06: // 00110
case 0x0C: // 01100
case 0x18: printf(" 3"); break; // 11000
case 0x1B: printf(" 3-3"); break; // 11011
case 0x0B: // 01011
case 0x0D: // 01101
case 0x13: // 10011
case 0x16: // 10110
case 0x19: // 11001
case 0x1A: printf(" 3-2"); break; // 11010
case 0x01: // 00001
case 0x02: // 00010
case 0x04: // 00100
case 0x08: // 01000
case 0x10: printf(" 2"); break; // 10000
case 0x05: // 00101
case 0x09: // 01001
case 0x0A: // 01010
case 0x11: // 10001
case 0x12: // 10010
case 0x14: printf(" 2-2"); break; // 10100
case 0x15: printf(" 2-2-2"); break; // 10101
case 0x00: printf(" 0"); break; // 00000
}
printf("\n");
}
int main(int argc, char *argv[])
{
int result[MAX_NUMBER+1];
unsigned long total, r;
int n=0;
int i, j;
srand(time(NULL));
for (i=0; i<=MAX_NUMBER; i++)
result[i] = 0;
for (i=0; i<20; i++)
sum[i] = 0;
total = fnGenerateNumber();
printf("total: %ld\n\n", total);
fnAnalysisNumber(total);
if (argc >= 2)
n = atoi(argv[1]);
if (n < 1) n = 1;
for(i=0; i<n; i++)
{
r = rand() % total;
fnPrintNumber(r);
for (j=0; j<6; j++)
result[number[r][j]]++;
}
printf("\nSummary:\n");
for (i=1; i<=MAX_NUMBER; i++)
{
printf(" %3d", result[i]);
if ((i % 10) == 0)
printf("\n");
}
printf("\n\n");
for (i=0; i<=10; i++)
printf(" %s = %d\n", sumstr[i], sum[i]);
printf("\n");
exit(0);
}
代碼: total: 13983816 <== 這是全部的數字 Number analysis: 6 ==> 44 ( 0.000 ) <== 六個數字都連號 5 ==> 1892 ( 0.014 ) <== 五個數字連號 4 ==> 39732 ( 0.284 ) <== 四個數字連號 4-2 ==> 1892 ( 0.014 ) <== 四個數字連號, 外加兩個連號 3 ==> 543004 ( 3.883 ) <== 三個數字連號 3-3 ==> 946 ( 0.007 ) <== 三個-三個連號 3-2 ==> 79464 ( 0.568 ) <== 三個-兩個連號 2 ==> 5430040 ( 38.831 ) <== 兩個連號 2-2 ==> 814506 ( 5.825 ) <== 兩個-兩個連號 2-2-2 ==> 13244 ( 0.095 ) <== 兩個-兩個-兩個連號 0 ==> 7059052 ( 50.480 ) <== 完全不連號 6593339 ==> 5 14 28 32 33 42 ==> 2 Summary: 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 6 = 0 5 = 0 4 = 0 4-2 = 0 3 = 0 3-3 = 0 3-2 = 0 2 = 1 2-2 = 0 2-2-2 = 0 0 = 0 如果將程式改成 38 個號碼(將 #define MAX_NUMBER 49 中 49 改成 32 即可) 機率會更大(超過 50) |
|
#10
| |||
| |||
| 唉... 本來是不想 直接把 程式碼PO上來. 想說樓主既然有修這門課,還是自己先想一下 我只給個提示就好了 後來又覺得 如果基礎不好 或是 觀念不對 想也想不出所以然,乾脆直接把答案寫出來, 是真的想學 還是只是想抄 就隨便了 底下的程式 是在 Dev-C++ 4 執行 代碼: #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int B_S,MaxNum,I,J,TempRand,lotto[6];
srand(time(NULL));
printf("0.exit\n");
printf("1.Big Lotto (6/49)\n");
printf("2.Small Lotto (6/42)\n");
printf("Your Choice : ");
scanf("%d",&B_S);
switch(B_S){
case 1: printf("\nYour Choice is Big Lotto\n"); MaxNum=49; break ;
case 2: printf("\nYour Choice is Small Lotto\n"); MaxNum=42; break ;
default : return 0 ;
}
printf("\nThe UnSort Lotto Numbers are:");
//--------------亂數取6個值 但是不重複--------------
for(I=0;I<6;I++){
do{
TempRand=(rand()%MaxNum)+1;
for(J=0;J<I;J++){
if(TempRand==lotto[J]) break;
}
} while (TempRand==lotto[J]);
lotto[i]=TempRand;
printf(" %d,",lotto[i]);
}
printf("\n");
//--------------排序--------------------
for(J=5;J>0;J--){
for(I=0;I<J;I++){
if(lotto[i]>lotto[I+1]){
TempRand=lotto[i];
lotto[i]=lotto[I+1];
lotto[I+1]=TempRand;
}
}
}
//---------------------------------------
printf("\nThe Sorted Lotto Numbers are:");
for(I=0;I<6;I++){
printf(" %d,",lotto[i]);
}
printf("\n\n");
system("PAUSE");
return 0;
}
有一點很奇怪 我的原始程式 I 都是大寫的 為什麼 貼上來 會自動變小寫的呢? 此文章於 2005-11-30 08:55 PM 被 heavywang 編輯. |