C语言随机产生10个不重复的字母放在数组a中

2025-05-04 05:24:51
推荐回答(3个)
回答1:

我是原来的2楼,虽然1楼给了你一个答案,但我给你一个最快最省空间的。
#include
#include
#include

int main(void)
{
int index=0; //这个是用做索引的,如果已经有这个字符了,就将相应的位设置为1
char ch[11]={0}; //多申请了一个字节是为了后面能以字符串形式打印出来。
int i=0;
srand((unsigned)time(NULL));
while(i<10)
{
int tmp=rand()%26;
int mask= (0x1< if( (index & mask) ==0) //判断有没有这个字符,如果没有则运行下面的语句
{
index |= mask; //设置索引位
ch[i]='a'+tmp; //保存这个字符
i++;
}
}
printf("%s\n",ch);
return 0
}
不懂的地方可以追问

刚才和别人讨论了一下,以上代码只是最省空间,但不是最快。最快的代码如下:
#include
#include
#include

int main(void)
{
char ch[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y',z'};
int a=26;
int i=0;
srand((unsigned)time(NULL));
while(i<10)
{
int j=rand()%a;
char tmp=ch[i];
ch[i]=ch[j+26-a];
ch[j+26-a]=tmp;
i++;
}
ch[i]='\0';
printf("%s\n",ch);
return 0;
}
这样是最快的,只需要10次。刚修改了一下,改正了一个错误

回答2:

#include
#include
#include
char a[10];
int b[26];
int main() /* 主函数 */
{
int i,j,tmp,T=10000;
for(j=0;j<26;j++)b[j]=j;
srand(unsigned(time(NULL)));
while(T--)
{
i=rand()%26;
j=rand()%26;
tmp=b[i];
b[i]=b[j];
b[j]=tmp;
}
for(i=0;i<10;i++)
{
a[i]=b[i]+'a';
putchar(a[i]);
}
puts("");
return 0;

}

回答3:

#include
#include
#include
int main(void)
{
char ch[11]={0};
int i=0;
srand((unsigned)time(NULL));
while(i<10)
{
int tmp = rand()%(26*2);
tmp = tmp<26 ? tmp+'A': tmp-26+'a';
if( (strchr(ch,tmp)) ==0)
{
ch[i] = tmp; //保存这个字符
i++;
}
}
printf("%s\n",ch);
return 0;
}
//1楼2楼算法都不赖,我也献丑,用2楼的框框改个,输出不限于小写,改后算法 简陋易懂