2014-02-14 87 views
-1

我有一個項目,但我的老師沒有教我們關於數組。我們需要輸出= <>符號,對應於一個數字與另一個數字的比較。 IE的主號碼是1234,我輸入2315,輸出將是< < <>其中符號不按數字順序排列,但按此順序=,<,>。數組迭代程序

我有一個想法,並使用數組,然後使用一些代碼,將讀出整個數組並應用規則,但我不知道如何實現這一點。我一直在Google上搜索一下,沒有發現真正有用的東西。

只是爲了讓你知道該程序有更多的步驟比這一點,所有我已經完成,我只是無法弄清楚這部分。我不想只是答案,我只是想讓別人指出我正確的方向。

謝謝

編輯::例1234和2315是壞例子。爲了給出一個更明確的想法,而不會泄露太多的問題,所以我有工作要做的是將num1和num2(對應於1234和2315)從最小到最大或最大到最小並且比較這種方式。所以另一個例子是4751是主號碼,我放在1294.輸出將是== <>。感謝迄今爲止的幫助。我學到很多東西。

EDIT2 ::謝謝你們的幫助。我學到了很多。至少在我可以上傳我的代碼之前,我不想再提交任何意見。

+0

完全困惑。你可以給一些樣本輸入/輸出嗎?我們需要更多的細節:數組長度固定或動態等。 –

+2

@FiddlingBits:1 <2,2,< 3, 3 > 1和4 <5,所以三個< and one >,所以期望的輸出是<<<>。 –

+0

@PaulGriffiths謝謝你清理。 –

回答

1

以你的口吻告訴你,你已經成功地完成了你的大部分任務,並且給你你需要通過並理解的代碼來弄清楚它並根據你的需求進行調整,這將會做你想。事實上,您不必以與數字本身相同的順序輸出符號,這使得這更容易。

#include <stdio.h> 

int main(void) { 
    int num1 = 1234; 
    int num2 = 2315; 

    int lt = 0, gt = 0, eq = 0; 

    while (num1 > 0 && num2 > 0) { 
     int op1 = num1 % 10; 
     int op2 = num2 % 10; 

     if (op1 < op2) { 
      ++lt; 
     } else if (op1 > op2) { 
      ++gt; 
     } else { 
      ++eq; 
     } 
     num1 /= 10; 
     num2 /= 10; 
    } 

    for (int i = 0; i < eq; ++i) { 
     putchar('='); 
    } 

    for (int i = 0; i < lt; ++i) { 
     putchar('<'); 
    } 

    for (int i = 0; i < gt; ++i) { 
     putchar('>'); 
    } 

    putchar('\n'); 

    return 0; 
} 

和輸出:

[email protected]:~/Documents/src/scratch$ ./eq 
<<<> 
[email protected]:~/Documents/src/scratch$ 
+0

非常感謝。這實際上幫了我很多。 1234和2315的例子並沒有真正指出項目的目標是什麼,所以這段代碼並沒有完全發揮作用,但它給了我一個如何讓它工作的想法。我將在接下來的幾天內發佈我的完整代碼。 – Nick

0

這段代碼可以讓你得到的第n個數字,你可以比較,讓每個需要返回

char nthdigit(int x, int n) 
{ 
    while (n--) { 
     x /= 10; 
    } 
    return (x % 10) + '0'; 
} 

符號的數量和你這是怎麼拿到號碼的長度時,檢查該post

0

如這裏承諾是我的代碼的其餘部分。它解決了問題中指出的問題,但我有另一個問題。這可能是相當明顯的,但我想發佈我的代碼,所以我不會再忘記。

#include<stdio.h>//standard inputs and outputs 
#include<stdlib.h>//for compare, qsort, srand, and rand function 
#include<time.h>//for random numbers at different times 
#include<unistd.h>//for fun at the end 



int main(void){ 

int guess, gdig1, gdig2, gdig3, gdig4, random, rdig1, rdig2, rdig3, rdig4;//variables for main 
int lt, gt, eq, i, q, temp, holder;//this is for the hints 
int g[3],r[3]; 


printf("Give the computer a few seconds to come up with a super secret passcode.\n"); 


do{//figuring out a random code 
unsigned int iseed = (unsigned int)time(NULL); 
srand (iseed);//using an unassigned integer 
random = rand()%9000+1000;//generating a random number but limiting it 
rdig4 = random%10; 
rdig3 = (random/10)%10; 
rdig2 = (random/100)%10; 
rdig1 = (random/1000)%10;//figuring out the individual digits of the code 
} while ((rdig1 == rdig2)||(rdig1 == rdig3)||(rdig1 == rdig4)||(rdig2 == rdig3)||(rdig2 == rdig4)||(rdig3 == rdig4)||(rdig1 == 0)||(rdig2 == 0)||(rdig3 == 0)||(rdig4 == 0)); 
//^^ some crazy boolean expression making sure the random integer doesnt have any of the same digits. 




printf("\nThe actual passcode is:%d.\n",random);//testing in beginning comment out ******** 




do{ 
do{ 
    printf("\nEnter in your guess for the passcode: "); 
    scanf("%d",&guess);//inputting and reading the guessed code 

//  printf("You entered:%d\n",guess);//just to check comment out at end** 

    gdig4 = guess%10; 
    gdig3 = (guess/10)%10; 
    gdig2 = (guess/100)%10; 
    gdig1 = (guess/1000)%10;//figuring out the individual digits of the guess code using modulus operator 


    if (guess > 9999){//the starting loop statement to make sure number is valid. this one is if it is greater than 4 digits 
      printf("\nPlease use a four digit number for the passcode.\n"); 
    } 
    else if (guess < 1000){//this one is if it is less than 4 digits 
      printf("\nPlease use a four digit number for the passcode.\n"); 
     gdig1 = 1; 
     gdig2 = 1;//used so the computer still loops 
     gdig3 = 1; 
     gdig4 = 1; 
    } 
    if ((gdig1 == 0) || (gdig2 == 0) || (gdig3 == 0) || (gdig4 == 0)){ 
     break; 
    } 
    if ((rdig1 == gdig1) && (rdig2 == gdig2) && (rdig3 == gdig3) && (rdig4 == gdig4)){//to skip this codeblock and move onto next 
     break; 
    } 
if (guess > 9999){ 
    break; 
} 
if (guess < 1000){ 
    break; 
} 
printf("\n%d %d %d %d\n",rdig1,rdig2,rdig3,rdig4); //used to testing comment out at end 
printf("\n%d %d %d %d\n",gdig1,gdig2,gdig3,gdig4); 


while (guess > 0){ 
g[i++] = guess % 10; 
guess /=10; 
} 

do{//took a long long LONG time to get 
    for(i = 0; i<3;i++){ 
     if(g[i] > g[i+1]){ 
      holder = g[i+1]; 
      g[i]=g[i+1]; 
      g[i+1] = holder; 
     } 
    } 
}while (i == 1); 
for(i = 0;i<4;i++){ 
printf("%d",g[i]); 
} 


while (random > 0){ 
r[i++] = random % 10; 
random /=10; 
} 

do{//took a long long LONG time to get 
    for(i = 0; i<3;i++){ 
     if(r[i] > r[i+1]){ 
      temp = r[i+1]; 
      r[i]=r[i+1]; 
      r[i+1] = temp; 
     } 
    } 
}while (i == 1); 
for(i = 0;i<4;i++){ 
printf("%d",r[i]); 
} 



/*  for(digit=0;digit<4;digit++){ 
     for(tmp=guess;tmp>0;tmp/=10){ 
      if(tmp%10==digit){ 
       printf("%d",digit); 
       g[i++]=digit; 
      } 
     } 
    } 
    printf("\n"); 
    for(i=0;i<4;i++){ 
     printf("%d",g[i]); 
     }//just to check 


    //this is for sorting the random 
    for(digit=0;digit<4;digit++){ 
     for(tmp=random;tmp>0;tmp/=10){ 
      if(tmp%10==digit){ 
       printf("%d",digit); 
       r[i++]=digit; 
      } 
     } 
    } 
    for(i=0;i<4;i++){ 
     printf("%d",r[i]); 
     }//just to check 
*/ 
//this is for hints 
rdig1=r[0];//redefining the random and guess digits so it is easier later 
rdig2=r[1]; 
rdig3=r[2]; 
rdig4=r[3]; 
gdig1=g[0]; 
gdig2=g[1]; 
gdig3=g[2]; 
gdig4=g[3]; 



q = 0; 
eq = 0; 
lt = 0; 
gt = 0; 
if (random > 0){//loop that always holds true 
    if (gdig1 == rdig1){ 
    eq++; 
    }else if (gdig1 < rdig1){ 
    lt++; 
    }else if (gdig1 > rdig1){ 
    gt++; 
    } 
    if (gdig2 == rdig2){ 
    eq++; 
    }else if (gdig2 < rdig2){ 
    lt++; 
    }else if (gdig2 > rdig2){ 
    gt++; 
    } 
    if (gdig3 == rdig3){ 
    eq++; 
    }else if (gdig3 < rdig3){ 
    lt++; 
    }else if (gdig3 > rdig3){ 
    gt++; 
    }  
    if (gdig4 == rdig4){ 
    eq++; 
    }else if (gdig4 < rdig4){ 
    lt++; 
    }else if (gdig4 > rdig4){ 
    gt++; 
    } 
} 
for (q = 0; q < eq; q++){//counting step for the = <> no problems here^^ 
    putchar('='); 
} 
for (q = 0; q < lt; q++){ 
    putchar('<'); 
} 
for (q = 0; q < gt; q++){ 
    putchar('>'); 
} 


//everything below is correct do not mess with ******************************************************************************************* 
} while (gdig1 > 0);//to loop inputs until they input correctly 

if ((gdig1 == 0) || (gdig2 == 0) || (gdig3 == 0) || (gdig4 == 0)){//a nested if statement to check each digit if it is a 0 
    printf("\nYou have entered the Super Secret Code!!!!!\nThe actual passcode is:%d.\n",random); 
    break; 
} 
if ((rdig1 == gdig1) && (rdig2 == gdig2) && (rdig3 == gdig3) && (rdig4 == gdig4)){//to skip this codeblock and move onto next 
    break; 
} 

} while (((rdig1 != gdig1) && (rdig2 != gdig2) && (rdig3 != gdig3) && (rdig4 != gdig4)));//to loop inputs until they got it 




//everything below is correct do not mess with ******************************************************************************************* 
if ((rdig1 == gdig1) && (rdig2 == gdig2) && (rdig3 == gdig3) && (rdig4 == gdig4)){ 
printf("\nCorrect Code inputted."); 
sleep(1); 
printf("\nImplementing unlocking procedures...\n"); 

for (i=0;i<=4;i++){//for fun cause why not. if you spend hours on code might as well have some fun :) 
    int p =25*i ; 
    printf("%d%% complete................\n",p); 
    sleep(1); 
} 
printf("Stand back!!! The vault is now opening.\n"); 
} 

return 0; 
}