关于前N个自然数随机置换的有关问题

关于前N个自然数随机置换的问题

#include <stdio.h>
#include <stdlib.h>
#include <time.h>  
#define Size 10

int RandInt(int i,int j)//give a random between i and j 
{
    if(i==0)
        return rand()%j;
    else
        return rand()%(j-i+1)+i;
}

int main()
{
int i,ran,k;
int A[Size],used[Size]={0};
srand(time(NULL));

while(i<Size)
{
ran=RandInt(1,Size);
if(used[ran]==1){
A[i]=ran;
used[ran]=1;
i++;

}

}

for(k=0;k<Size;k++)
{
printf("A[%d] = %d",k,A[k]);
if(k%5==0)
{
printf("\n");
}
}

return 0;
}


貌似程序一直停在循环里面了,不知道怎么回事,感觉思路上没问题啊;
P.S.思路有一个附加数组,记录随即数值之前有没有产生过,如果没有那么就赋值给A[i].
------解决思路----------------------
另外逻辑也是错的,代码大概不完整
------解决思路----------------------
不要讲貌似

希望我代替你吃饭么?

------解决思路----------------------
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
    srand(time(NULL));
    printf("shuffle 0..n-1 demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */
            for (i=n;i>0;i--) {/* 打乱0~n-1 */
                a=i-1;b=rand()%i;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=0;i<n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
    printf("shuffle 1..n demo\n");
    for (n=1;n<=5;n++) {/* 测试1~5个元素 */
        printf("_____n=%d_____\n",n);
        j=1;
        for (c=1;c<=n;c++) j=j*c;/* j为n! */
        j*=n*2;
        for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
            for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */
            for (i=n;i>1;i--) {/* 打乱1~n */
                a=i;b=rand()%i+1;
                if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
            }
            printf("%04d:",c);
            for (i=1;i<=n;i++) printf("%d",d[i]);
            printf("\n");
        }
    }
}

------解决思路----------------------
看来你也不会单步调试,自己看逻辑把
if(used[ran]==1) //第一次的时候,used里面都是0,因此什么也不会做,同理,永远都是什么都不作空转
老赵的话虽然很多人都反感,不过对一个程序员来说,单步调试都不会的话,还是改行算了