2

Begining with an ordered array

 [1, 2, 3, 4, 5, 6, 8, 9, 10]

How would be the way to get every iteration the following results?

1   2   3   4   5   6   7   8   9   10
1   3   4   5   6   7   8   9   10   2
1   4   5   6   7   8   9   10   2   3
1   5   6   7   8   9   10   2   3   4
1   6   7   8   9   10   2   3   4   5
1   7   8   9   10   2   3   4   5   6
1   8   9   10   2   3   4   5   6   7
1   9   10   2   3   4   5   6   7   8
1   10   2   3   4   5   6   7   8   9


#include <stdio.h>    
#define MAX 10 
int a[MAX], i,j,cnt=2;
main (){
    for (i=0; i<MAX; i++){
       a[i]= i+1;
    }
    for (i=0; i<MAX; i++) {
        printf ("%d   ", a[i]);
    }
    printf ("\n");

    for (j=0; j < MAX-2;j++){
           a[0]=1;
           for (i=1; i < MAX-1; i++){
                if (a[i]%MAX != 0){
                       a[i]= a[i] + 1;
                }else{
                     if (a[i]==10) {
                     //printf ("a[%d]: %d \t ** %d\n", i , a[i] ,cnt);
                     //a[i-1]= i;
                    a[i]  = cnt;
                }
            }
        }
        for (i=0; i<MAX; i++)    {
                printf ("%d   ", a[i]);
         }

        printf ("\n");
       }
  }

Now I almost get it but the last column is not right, What should I do?

1   2   3   4   5   6   7   8   9   10   
1   3   4   5   6   7   8   9   10   10   
1   4   5   6   7   8   9   10   2   10   
1   5   6   7   8   9   10   2   3   10   
1   6   7   8   9   10   2   3   4   10   
1   7   8   9   10   2   3   4   5   10   
1   8   9   10   2   3   4   5   6   10   
1   9   10   2   3   4   5   6   7   10   
1   10   2   3   4   5   6   7   8   10 
0

2 Answers 2

3

C arrays are indexed from 0. So when you access elements from 1 to MAX, you are running off the end of the array.

Have your loops go from 0 to MAX-1. Customary way to write it is

for (i=0 ; i < MAX ; ++i)

...so anybody reading your code can immediately prove that the array index never equals MAX.

Sign up to request clarification or add additional context in comments.

Comments

0

Well, at a minimum, arrays in C are zero based so you are writing past the end of the array. For an array declared int foo[MAX] valid elements are from foo[0]…foo[MAX-1]

Specifically a[MAX] might well reference the memory location that the variable i uses, causing the loop to reset when it attempt to overwrite a[MAX].

Either shift everything down by one, or declare your array MAX+1 and ignore the zero bit.

Oh, and you should not need to set a[1]=1; every time.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.