69,369
社区成员
发帖
与我相关
我的任务
分享
// 交换两个int值
void change(int *a, int *b)
{
int n = *a;
*a = *b;
*b = n;
}
#define STUDENT_NUM 7 // 定义学生总数
int main()
{
const char * name[STUDENT_NUM] =
{
"张三",
"李四",
"王五",
"赵六",
"路人甲",
"路人乙",
"无名氏"
};
int nIndex[STUDENT_NUM] ={0};
srand((UINT)time(0)); // 设置随机种子
for (int i =0; i != STUDENT_NUM; i++) // 初始化索引数组
{
nIndex[i] = i;
}
for (int i =0; i != STUDENT_NUM; i++) // 打乱索引数组中的值
{
change(&(nIndex[i]) , &(nIndex[rand()%STUDENT_NUM]));
}
for (int i = 0; i != STUDENT_NUM; i++) // 打印打乱值的索引对应的字符串
{
printf("%s\n" ,name[nIndex[i]]);
}
return 0;
}
#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");
}
}
}