08/01/27 20:03:38
>>664
#include<stdio.h>
#include<stdlib.h>
typedef struct tag_dataset{int index, data;}dataset_t;
void swap_int(int *a, int *b){int c;c=*a;*a=*b;*b=c;}
void swap_dataset(dataset_t *a, dataset_t *b){dataset_t c;c=*a;*a=*b;*b=c;}
void encode(int data[], int datanum, int seed){
int i;
srand(seed);
for(i=0;i<datanum;i++) swap_int(&data[i], &data[rand()%(i+1)]);
}
void decode(int data[], int datanum, int seed){
int i; dataset_t *tmp;
srand(seed);
tmp=malloc(sizeof(*tmp)*datanum);
for(i=0;i<datanum;i++) tmp[i].index=i;
for(i=0;i<datanum;i++) swap_dataset(&tmp[i], &tmp[rand()%(i+1)]);
for(i=0;i<datanum;i++) tmp[i].data=data[i];
for(i=0;i<datanum;i++) data[tmp[i].index]=tmp[i].data;
free(tmp);
}
void prt(int data[], int datanum){
int i;
for(i=0;i<datanum;i++) printf(" %d", data[i]);
printf("\n");
}
int main(void){
int data[]={1,2,3,4, 5, 6, 7, 8, 9, 10}, datanum=sizeof(data)/sizeof(data[0]);
encode(data, datanum, 0); prt(data, datanum); /* 0 の部分が乱数seed */
decode(data, datanum, 0); prt(data, datanum); /* 0 の部分が乱数seed */
return 0;
}