|
2005/4/3 上午 09:47:18
請問如何用C++寫出如下效果的程式(編譯程式是Dev C++)
請寫一個由電腦隨機產生不同數字的四位數(1A2B遊戲),玩家可重覆猜電腦所產生的數字,一旦猜對,系統可自動計算玩家猜測的次數。
------------------------- 舉例:電腦產生4153 玩家猜:4531 ->> 1A3B 玩家猜:4135 ->> 2A2B 玩家猜:4153 ->> 猜對了,一共猜了3次
|
|
|
2005/4/3 下午 08:46:02
在下是用陣列的方法去做,number[4] 然後再一個一個去比較
|
|
|
2005/4/4 上午 12:53:55
int A,B; char answer[4] ,number[4] //答案 及 玩家 變數 answer[4]={'0','1','2','3'}; //答案0123
for(int i=0;i<4;i++) //玩家數入4個數 PS.我在此會多加一個檢查函式 cin.get(number[i]); //check_num(char []) 用來檢查是否為數字,有沒有重複 for(int i=0;i<4;i++) //比對答案 if(answer[i]==number[i]) A++; for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(answer[i]==number[j] && i!=j) B++;
其他零碎的就不寫了 我想以上精華區~~要判斷輸入幾次的話 多加個變數和迴圈就行了
|
|
|
2005/4/5 下午 12:10:12
我也是程式的初學者 看到這篇文章覺得很有趣就PO看看 應該沒有錯拉... 可是我寫的很冗長島是真的>< 希望大家不吝指教 # include<stdio.h> # include<stdlib.h> # include<time.h>
void guess(int [],int [],int &,int &); int main() { int conans[4],ppans[4]; int i,peans,a=0; int tim=0; srand(time(NULL)); for(i=0;i<4;i++){ conans[i]=rand()%10; } do{ printf("Pleae input your ans:"); scanf("%d",&peans); for(i=0;i<4;i++){ ppans[i]=peans%10; peans/=10; } guess(conans,ppans,a,tim); }while(a!=4); return 0; } void guess(int conans[],int ppans[],int &a,int &tim) { int i,j; int b=0; for(i=0;i<4;i++){ for(j=3;j>=0;j--){ if(conans[i]==ppans[j]) b++; } } for(i=0;i<4;i++){ for(j=3;j>=0;j--){ if(conans[i]==ppans[j]){ a++; break; } } } b-=a; if(b<0) b==0; tim++; printf("%dA%dB\n",a,b); printf("You guess %d time!\n",tim);
if(a==4){ printf("You got it!!!"); printf("The ans is:"); for(i=0;i<4;i++){ printf("%d",conans[i]); } } }
|
|
|
2005/4/6 下午 09:10:32
http://yifu.oners.idv.tw/viewthread.php?tid=160&page=2&fpage=2
|
|
|
2005/4/6 下午 11:54:18
<pre> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #include <ctype.h>
#define ESC 0x1B
void main() { char Key_num[5],Set_num[5]; int count=0; int A,B; //亂數設4位數字 srand(time(NULL)%37); for (int i=0;i<4;i++) { Set_num[i] = rand()%10+48; //4位數字不可重覆 for (int j=0;j<i;j++) if (Set_num[i] == Set_num[j]) i--; } do { A = B = 0; int check = 0; //輸入4位數字 for (int x=0;x<4;x++) { Key_num[x] = getch(); if (Key_num[x] == ESC)//按下Esc鍵強制結束 return; for (int y=0;y<x;y++)//判斷輸入數字不重覆 if (Key_num[x] == Key_num[y]) check = 1; if (isdigit(Key_num[x]) && check == 0)//判斷輸入數字才印出 putch(Key_num[x]); else//非數字及重覆數字之處理程序 { x--; check = 0; } } //判斷猜中幾位(填入AB) 主要的判斷式在這裡 for (int y=0;y<4;y++) for (int z=0;z<4;z++) if (Key_num[y] == Set_num[z]) y==z?A++:B++; //顯示猜測結果 count++; printf("\t%dA%dB\n",A,B); } while (A != 4); printf("總共猜了 %d 次\n",count); } 如果不處理輸入重覆數字及非數字字元..程式會簡短許多...... </pre>
|
|
|
2005/4/11 下午 04:11:32
請問用來檢查是否為數字,有沒有重複這行我執行有問題 可不可以詳細的教一下還有如果要下這指令,要下標 頭 嗎 謝謝
|
|
|
2005/4/21 上午 02:07:15
>請問用來檢查是否為數字,有沒有重複這行我執行有問題 >可不可以詳細的教一下還有如果要下這指令,要下標 頭 嗎 >謝謝 sorry最近比較忙,所以沒什麼時間可以上來看文章 到今天才回..很抱歉^^" 您說執行有問題,可否詳述是出現什麼錯誤訊息!
isdigit();<==這個函數需要 type.h 這個標頭檔
|
|
|
2006/6/6 下午 12:18:45
請問各位大大!! C++可以寫出跟電腦對猜的猜數字遊戲嗎? 可以的話是否有哪為大大願意提供給我(順便加以說明一下...我想了解一下!!) 我的MAIL:h0933966319@yahoo.com.tw 先感謝了!!
|
|
|
2006/6/6 下午 12:19:15
請問各位大大!! C++可以寫出跟電腦對猜的猜數字遊戲嗎? 可以的話是否有哪為大大願意提供給我(順便加以說明一下...我想了解一下!!) 我的MAIL:h0933966319@yahoo.com.tw 先感謝了!!
|
|
|
2006/6/11 上午 06:51:06
可參考 http://www.math.ncu.edu.tw/~ziyou/c++/practice/index.htm
|
|
|
2006/6/15 上午 09:45:04
小弟是超級初學者請不吝指教.
#include <iostream> #include <stdlib.h> #include <stdio.h>
int main (int) { int num[8],num1[8]; int i,j,k=1,tmpA=0,tmpB=0; srand( time(NULL) ); for( i = 0; i < 4; i++ ) { num[i]=rand()%10; //亂數產生1~10任意數字並放入陣列內 for (j=0;j<i;j++) { if (num[i] == num[j]) //比較是否重複 { i--; //重複則重新產生 } } } while (k) { for (i=0;i<=3;i++) { printf ("Please input the %d answers =>",i+1); //輸入答案並放入num1陣列內 scanf ("%d",&num1[i]); } for (i=0;i<=3;i++) { if (num[i] == num1[i]) //比較數字及位置相同的數 { tmpA+=1; //數字位置相同的數量放至tmpA內 } } for (i=0;i<=3;i++) { for (j=1+i;j<=3+i;j++) { if (num[i] == num1[j]) //比較位置不同數字相同的數 { tmpB+=1; //將數量放至tmpB內 } num1[i+4]=num1[i]; } num1[i]=0; } if (tmpA == 4 ) //猜出4A 則顯示good game並跳出回圈 { printf ("Good Game , %d times\n",k); break ; } else printf ("%dA %dB\n",tmpA,tmpB); tmpA=0,tmpB=0; k+=1; //猜幾次的數 } system ("PAUSE"); return 0; }
|
|
|
2006/8/24 下午 05:25:42
#include <iostream> #include <stdlib.h> #include <time.h> #include "homework.h"
using namespace std;
int ansnumber[4],cpnumber[4];
void number(void) { int i; srand((unsigned) time(NULL));
for(i=0;i<4;i++) { cpnumber[i]=rand()%10; for(int j=i-1;j>=0;j--) { if(cpnumber[i]==cpnumber[j]) { i--; break; } } } }
int check(char *checkstr,int checklen) { int i; if(checklen>4||checklen<0) { cout << "輸入數字長度為4\n"; return 1; }
for(i=0;i<checklen;i++) { if(checkstr[i] >'9' || checkstr[i] <'0' ) { cout << "請輸入數字\n"; return 1; } }
for(i=0;i<checklen;i++) { for(int j=i-1;j>=0;j--) { while(checkstr[i]==checkstr[j]) { cout << "輸入重複\n"; return 1; } } }
for(i=0;i<checklen;i++) ansnumber[i]=(int)checkstr[i]-48; return 0; }
void innumber(void) { char play[100]="0"; int len; do { cout << "請輸入4個數字:"; cin >> play; len=strlen(play); }while(check(play,len)); }
int cheackans(void) { int a=0,b=0;
for(int i=3;i>=0;i--) { for(int j=3;j>=0;j--) { if(cpnumber[i]==ansnumber[j]) { if(i==j) { a++; continue; } b++; } } } if(a==4) { cout << "恭喜你贏了!!" << endl;; return 0; } else { cout << a << "A" << b << "B" << endl;; return 1; } }
void guessnumber(void)//猜數字 { number(); /*for(int i=0;i<4;i++) cout << cpnumber[i]; cout << endl;測試用*/ do { cout << "================猜數字===============" << endl; innumber(); }while(cheackans()); }
|
|
|
|
|
|
C++ |
 |
|
|
專家等級 |
評價 |
|
|
一代宗師 |
10000 |
|
|
曠世奇才 |
5000 |
|
|
頂尖高手 |
3000 |
|
|
卓越專家 |
1500 |
|
|
優秀好手 |
750 |
|
|
|
|
|
|
|
|
|
Microsoft Internet Explorer
6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/ |
|
|