2015-12-05 27 views
-1

“罢工”功能必须返回用户输入的等效次数。根据用户的输入确定随机数中的罢工次数

假定,随机数是1234

如果用户的输入具有随机的号码中的一个,然后strike1 ++。

例如,如果我输入5152,然后strike1将2

如果我的输入,1112,那么罢工将再次2.

我得到的strike1错误的输出。任何想法如何解决它? (我不想用阵列来解决它)

解决方案:

#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <time.h> 

int hit(int num); 
int strike(int num); 
int rndNum(int num); 

void main() 
{ 
    int num = 0; 
    int chosenNum; 
    int saveHits, saveStrikes; 
    srand(time(NULL)); 
    printf("The Random number: %d", chosenNum = rndNum(num)); 
    printf("\nPlease enter a 4 digit number: "); 
    scanf("%d", &num); 
    saveHits = hit(num, chosenNum); 
    saveStrikes = strike(num, chosenNum); 
    printf("\nThe number of hits: %d", saveHits); 
    printf("\nThe number of strikes: %d", saveStrikes); 
    getch(); 
} 
int rndNum(int num) 
{ 
    int rndNum = rand() % 9000 + 1000; 

    return rndNum; 
} 

int hit(int num1, int chosenNum1) 
{ 
    int i, hit1 = 0; 
    for (i = 0; i < 4; i++) 
    { 
      if (num1 % 10 == chosenNum1 % 10) 
       hit1++; 
      num1 /= 10; 
      chosenNum1 /= 10; 
    } 
    return hit1; 
} 

int strike(int num1, int chosenNum1) 
{ 
    int i, strike1 = 0, n = 1; 
    int temp = num1, temp2 = chosenNum1; 
    for (i = 0;i < 4;i++) 
    { 
     while (n > 0) 
     { 
      if (temp > 0) 
      { 
       if ((temp % 10 == temp2 % 10)) 
       { 
        strike1++; n--; 
       } 
       else 
        temp /= 10; 
      } 
      else 
       n--; 
     } 
     temp2 /= 10; 
     n = 1; 
     temp = num1; 
    } 
    return strike1; 
} 
+0

嗨,解决了这个问题。 –

回答

1
int strike(int num1, int chosenNum1) 
{ 
    int i, strike1 = 0, n = 1; 
    int temp = num1, temp2 = chosenNum1; 
    for (i = 0;i < 4;i++) 
    { 
     while (n > 0) 
     { 
      if (temp > 0) 
      { 
       if ((temp % 10 == temp2 % 10)) 
       { 
        strike1++; n--; 
       } 
       else 
        temp /= 10; 
      } 
      else 
       n--; 
     } 
     temp2 /= 10; 
     n = 1; 
     temp = num1; 
    } 
    return strike1; 
}