程序的数组迭代

时间:2014-02-14 21:21:58

标签: c

我有一个项目,但我的老师还没有教过我们有关数组的知识。我们需要输出=<>对应于一个数字与另一个数字的比较的符号。 IE的主要数字是1234而我输入2315,输出将是<<<<<<<标志不按数字的顺序排列,但按此顺序=,<,>。

我有一个想法,然后使用数组然后使用一些代码来读出整个数组并对其应用规则,但是我不知道如何实现它。我已经谷歌搜索了一段时间,我找不到任何帮助。

只是为了让你知道程序有更多的步骤而不仅仅是这个,我已经完成了所有这些,我只是无法弄清楚这一部分。我不想要答案,我只是希望有人指出我正确的方向。

由于

编辑::示例1234和2315是不好的例子。为了给出更明确的想法而不泄露太多问题所以我要做的工作是将num1和num2(对应于1234和2315)从最小到最大或最大到最少列出并比较这种方式。所以另一个例子是4751是主要数字,我输入1294.输出将是==<>。感谢帮助人员到目前为止。我学到了很多东西。

EDIT2 ::谢谢大家的帮助。我学到了很多。至少在我上传代码之前,我不想再提交任何内容了。

3 个答案:

答案 0 :(得分: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;
}

和输出:

paul@MacBook:~/Documents/src/scratch$ ./eq
<<<>
paul@MacBook:~/Documents/src/scratch$ 

答案 1 :(得分:0)

此代码可让您获取可比较的第n位数字,并计算您需要返回的每个符号

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

这就是你获得数字长度的方法,请查看post

答案 2 :(得分: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;
}