#include #include #include #define LIMIT 5000 #define MAXI 10 void spread(int *A,int N,int K, int i) { int j; for(j=i;j 0); i--) for(j=K-1; S && (j >= i); j--,S-- ) A[j]++; } } void shuffle(int *K, int n, int S) { int i,j,tmp; for(i=0;i K[i+1]) { K[i] -= tmp/2; K[i+1] = tmp-K[i]; } else { K[i+1] -= tmp/2; K[i] = tmp-K[i+1]; } } } void randomize(int *A, int *changed, int N, int R,int S) { int index,value; srand(time(NULL)); while(R) { do index = rand()%N; while(changed[index]); do value = rand()%S; while(A[index] == value); A[index] = value; changed[index]=1; R--; } } int sumto(int i) { if(i) return i + sumto(i-1); return 0; } int main(int argc,char **argv) { static int A[LIMIT]; static int changed[LIMIT]={0}; int N,K,S,R,i,j,a,sum,changes=0; srand(time(NULL)); if(argc != 5) { printf("Usage: %s N K S R\nR is number of elements to randomize\n",argv[0]); exit(1); } N = atoi(argv[1]); K = atoi(argv[2]); S = atoi(argv[3]); R = atoi(argv[4]); assign(A,K,S); shuffle(A,K,S); for(i=0;i