伊莉討論區

標題: 我要學會程式,求救dev c++~判斷 [打印本頁]

作者: 美美希    時間: 2013-3-13 09:10 PM     標題: 我要學會程式,求救dev c++~判斷

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 飄飄酷熱降龍    時間: 2013-3-13 10:00 PM

開一個陣列
然後if比對
作者: snowflying    時間: 2013-3-14 01:36 AM

大略寫了一下,但我不確定正確性
數字應該不會重複吧?(記得這遊戲數字不會重複的說)
print f 中間的空格要去掉
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.         int digits;
  6.         while(scanf("%d",&digits) == 1)
  7.         {
  8.                 int i , A  = 0, B = 0;
  9.                 int a_count[10] = {0};
  10.                 int b_count[10] = {0};
  11.                 char *a = (char*) malloc(sizeof(char)*digits + 1);
  12.                 char *b = (char*) malloc(sizeof(char)*digits + 1);
  13.                 scanf("%s",a);
  14.                 scanf("%s",b);
  15.                 for(i = 0 ; i < digits ; ++i)
  16.                 {
  17.                         if(a[i] == b[i])
  18.                             ++A;
  19.                         ++a_count[a[i] - '0'];
  20.                         ++b_count[b[i] - '0'];
  21.                 }
  22.                 for(i = 0 ; i < 10 ; ++i)
  23.                     B += (a_count[i] < b_count[i]) ? a_count[i] : b_count[i];
  24.                 print f("%dA%dB\n",A,B-A);
  25.                 free(a);
  26.                 free(b);
  27.         }
  28.     system("pause");
  29.     return 0;
  30. }
複製代碼

作者: 美美希    時間: 2013-3-15 02:29 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 美美希    時間: 2013-3-15 02:45 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: snowflying    時間: 2013-3-15 03:33 PM

本帖最後由 snowflying 於 2013-3-15 03:40 PM 編輯
美美希 發表於 2013-3-15 02:45 PM
你寫的好難喔.....
這是用C寫出來的吧!
可以麻煩加一點簡單說明嘛!


我先假設數字不重複,也就是一列數字最多10個(0~9)
然後修改上面,以C++來寫
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;

  4. int main()
  5. {
  6.     int digits;
  7.     char a[11] , b[11];
  8.     while(cin >> digits)
  9.     {
  10.         int i , A  = 0, B = 0; // A 為 ?A 的次數 ,B 為 ?B 的次數
  11.         int a_count[10] = {0};
  12.         //存放第一列數字的次數,如153,則 a_count[1] = 1 , a_count[5] = 1 , a_count[3] = 1;
  13.                
  14.         int b_count[10] = {0}; //存放第二列數字的次數

  15.         cin >> a >> b; // 輸入 兩列數字

  16.         for(i = 0 ; i < digits ; ++i)
  17.         {
  18.             if(a[i] == b[i])  // 相等 多一個 A
  19.                 ++A;
  20.             ++a_count[a[i] - '0'];
  21.             ++b_count[b[i] - '0'];
  22.             }
  23.         for(i = 0 ; i < 10 ; ++i)
  24.             B += (a_count[i] < b_count[i]) ? a_count[i] : b_count[i];  // 計算 B+A
  25.         cout << A << 'A' << B-A << "B\n";  // 上面的 B 算出來的值是 B+A ,所以輸出要減去A
  26.     }
  27.     system("pause");
  28.     return 0;
  29. }
複製代碼

作者: 美美希    時間: 2013-3-18 10:22 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 美美希    時間: 2013-3-18 10:37 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: snowflying    時間: 2013-3-18 10:47 PM

美美希 發表於 2013-3-18 10:37 PM
++a_count[a - '0'];這句是什麼意思??
我知道是a_count累加
那[a-'0']是??

a - '0' 是算他的 index
減完後會像這樣
'0'  --> 0
'1'  --> 1
...
'9'  --> 9
然後對應到那個陣列中
作者: Edwin    時間: 2013-3-19 11:13 AM

snowflying 發表於 2013-3-14 09:33 PM
我先假設數字不重複,也就是一列數字最多10個(0~9)
然後修改上面,以C++來寫  ...

猜數字遊戲一定是數字不能有重複的
作者: 美美希    時間: 2013-3-20 05:29 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chimark777    時間: 2013-5-4 12:45 AM

25 for(i = 0 ; i < 10 ; ++i)
26     B += (a_count[i] < b_count[i]) ? a_count[i] : b_count[i];  // 計算 B+A
好巧妙的算法, 謝謝分享
作者: i100179398    時間: 2013-5-11 01:50 AM

GOOGLE  猜數字遊戲  就會有一大堆了  或者 1A2B  參考看看
作者: jason333hot    時間: 2013-5-15 10:14 PM

目前學校正在交c++  可是邏輯總是轉不過來,這個程式看了幾次才懂,謝謝分享
作者: rrss2211    時間: 2013-5-27 11:54 AM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!