问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问如何用C语言产生一个四位无重复数字的四位数?

发布网友 发布时间:2022-04-24 02:56

我来回答

5个回答

热心网友 时间:2023-10-23 06:35

可以先把0-9放入一个数组,然后对第一位,随机生成一个10以内的数如:rand()%8+1(避免高位是0的情况),产生的随机数来取数组中的数,并把数组在该位置以后的数前移,即删掉该数字。。第二位用rand()%8,得到,从数组中取出该对应位置的数字作为第二位,然后删掉该数组。。。第三位用rand()%7,第四位用rand()%6。。。这样就可以生成一个四位无重复数字的四位数了

热心网友 时间:2023-10-23 06:35

楼上采用rand生成的是数组下标来取不同的数,这个方法不错,但是数组移位过于繁琐。如果对随即产生的后几位数字与前几位进行比较,相同则重新选择,就省了不少步骤和时间。
我的程序如下,因手头没有编译软件,未曾测试,请楼主试验。如有疏漏,敬请见谅!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int a[4];
int i,j;
int k;

srand(time(NULL));
do
{
a[0]=rand()%10;//产生首位随机数,对10取模得0~9的数字
}
while(a[0]==0);//若首位为零则重新选择

for(i = 1;i < 4; i++)
{
do
{
a[i]=rand()%10;//产生其它几位随机数
k=0;//置标记位为零,表示两数字相同
for(j = 0; j < i; j++)
{
if(a[i]==a[j])//若与前几位相同则跳出,重置a[i]
break;
else
k=1;//若不同,则该位有效,置标记k为1
}
}while(k!=1);
}
//输出结果,下面用k来表示该四位数,将a[4]转换为int的k
k=a[0];
for(i=1;i<4;i++)
{
k=k*10+a[i];
}
printf("%d ",k);
}
百度知道把我每一行前面的空格都删除了,程序可读性就差了,请楼主自行缩进各行。

热心网友 时间:2023-10-23 06:36

#include<stdio.h>

void main()
{
int i, j, k, m, n = 0;
for(i=1; i<10; i++)
for(j=0; j<10; j++)
for(k=0; k<10; k++)
for(m=0; m<10; m++)
if((i != j) && (i != k) && (i != m) && (j != k) && (j != m) && (k != m))
{
printf("%d%d%d%d ",i,j,k,m);
n++;
}
printf("\n四位无重复数字的四位数总共有%d个\n",n);
}

热心网友 时间:2023-10-23 06:36

我也写了一个,运行了没问题,我是根据一楼的算法写的。
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int j,n,e,b,c,d;
srand((unsigned)time(NULL));
n=rand()%9+1;
e=a[n];
for(;n<=8;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%8;
b=a[n];
for(;n<=7;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%7;
c=a[n];
for(;n<=6;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%6;
d=a[n];

j=e*1000+b*100+c*10+d;
printf("这个随机的四位数为:%d",j);

}

热心网友 时间:2023-10-23 06:37

我觉得四楼写的程序简单易懂,适合初学者。而且可行。如果用VC编还得在
printf("\n四位无重复数字的四位数总共有%d个\n",n); 后加一行return;
编译就没问题了。

热心网友 时间:2023-10-23 06:35

可以先把0-9放入一个数组,然后对第一位,随机生成一个10以内的数如:rand()%8+1(避免高位是0的情况),产生的随机数来取数组中的数,并把数组在该位置以后的数前移,即删掉该数字。。第二位用rand()%8,得到,从数组中取出该对应位置的数字作为第二位,然后删掉该数组。。。第三位用rand()%7,第四位用rand()%6。。。这样就可以生成一个四位无重复数字的四位数了

热心网友 时间:2023-10-23 06:35

楼上采用rand生成的是数组下标来取不同的数,这个方法不错,但是数组移位过于繁琐。如果对随即产生的后几位数字与前几位进行比较,相同则重新选择,就省了不少步骤和时间。
我的程序如下,因手头没有编译软件,未曾测试,请楼主试验。如有疏漏,敬请见谅!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int a[4];
int i,j;
int k;

srand(time(NULL));
do
{
a[0]=rand()%10;//产生首位随机数,对10取模得0~9的数字
}
while(a[0]==0);//若首位为零则重新选择

for(i = 1;i < 4; i++)
{
do
{
a[i]=rand()%10;//产生其它几位随机数
k=0;//置标记位为零,表示两数字相同
for(j = 0; j < i; j++)
{
if(a[i]==a[j])//若与前几位相同则跳出,重置a[i]
break;
else
k=1;//若不同,则该位有效,置标记k为1
}
}while(k!=1);
}
//输出结果,下面用k来表示该四位数,将a[4]转换为int的k
k=a[0];
for(i=1;i<4;i++)
{
k=k*10+a[i];
}
printf("%d ",k);
}
百度知道把我每一行前面的空格都删除了,程序可读性就差了,请楼主自行缩进各行。

热心网友 时间:2023-10-23 06:36

#include<stdio.h>

void main()
{
int i, j, k, m, n = 0;
for(i=1; i<10; i++)
for(j=0; j<10; j++)
for(k=0; k<10; k++)
for(m=0; m<10; m++)
if((i != j) && (i != k) && (i != m) && (j != k) && (j != m) && (k != m))
{
printf("%d%d%d%d ",i,j,k,m);
n++;
}
printf("\n四位无重复数字的四位数总共有%d个\n",n);
}

热心网友 时间:2023-10-23 06:35

可以先把0-9放入一个数组,然后对第一位,随机生成一个10以内的数如:rand()%8+1(避免高位是0的情况),产生的随机数来取数组中的数,并把数组在该位置以后的数前移,即删掉该数字。。第二位用rand()%8,得到,从数组中取出该对应位置的数字作为第二位,然后删掉该数组。。。第三位用rand()%7,第四位用rand()%6。。。这样就可以生成一个四位无重复数字的四位数了

热心网友 时间:2023-10-23 06:36

我也写了一个,运行了没问题,我是根据一楼的算法写的。
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int j,n,e,b,c,d;
srand((unsigned)time(NULL));
n=rand()%9+1;
e=a[n];
for(;n<=8;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%8;
b=a[n];
for(;n<=7;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%7;
c=a[n];
for(;n<=6;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%6;
d=a[n];

j=e*1000+b*100+c*10+d;
printf("这个随机的四位数为:%d",j);

}

热心网友 时间:2023-10-23 06:35

楼上采用rand生成的是数组下标来取不同的数,这个方法不错,但是数组移位过于繁琐。如果对随即产生的后几位数字与前几位进行比较,相同则重新选择,就省了不少步骤和时间。
我的程序如下,因手头没有编译软件,未曾测试,请楼主试验。如有疏漏,敬请见谅!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int a[4];
int i,j;
int k;

srand(time(NULL));
do
{
a[0]=rand()%10;//产生首位随机数,对10取模得0~9的数字
}
while(a[0]==0);//若首位为零则重新选择

for(i = 1;i < 4; i++)
{
do
{
a[i]=rand()%10;//产生其它几位随机数
k=0;//置标记位为零,表示两数字相同
for(j = 0; j < i; j++)
{
if(a[i]==a[j])//若与前几位相同则跳出,重置a[i]
break;
else
k=1;//若不同,则该位有效,置标记k为1
}
}while(k!=1);
}
//输出结果,下面用k来表示该四位数,将a[4]转换为int的k
k=a[0];
for(i=1;i<4;i++)
{
k=k*10+a[i];
}
printf("%d ",k);
}
百度知道把我每一行前面的空格都删除了,程序可读性就差了,请楼主自行缩进各行。

热心网友 时间:2023-10-23 06:37

我觉得四楼写的程序简单易懂,适合初学者。而且可行。如果用VC编还得在
printf("\n四位无重复数字的四位数总共有%d个\n",n); 后加一行return;
编译就没问题了。

热心网友 时间:2023-10-23 06:36

#include<stdio.h>

void main()
{
int i, j, k, m, n = 0;
for(i=1; i<10; i++)
for(j=0; j<10; j++)
for(k=0; k<10; k++)
for(m=0; m<10; m++)
if((i != j) && (i != k) && (i != m) && (j != k) && (j != m) && (k != m))
{
printf("%d%d%d%d ",i,j,k,m);
n++;
}
printf("\n四位无重复数字的四位数总共有%d个\n",n);
}

热心网友 时间:2023-10-23 06:36

我也写了一个,运行了没问题,我是根据一楼的算法写的。
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int j,n,e,b,c,d;
srand((unsigned)time(NULL));
n=rand()%9+1;
e=a[n];
for(;n<=8;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%8;
b=a[n];
for(;n<=7;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%7;
c=a[n];
for(;n<=6;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%6;
d=a[n];

j=e*1000+b*100+c*10+d;
printf("这个随机的四位数为:%d",j);

}

热心网友 时间:2023-10-23 06:37

我觉得四楼写的程序简单易懂,适合初学者。而且可行。如果用VC编还得在
printf("\n四位无重复数字的四位数总共有%d个\n",n); 后加一行return;
编译就没问题了。

热心网友 时间:2023-10-23 06:35

可以先把0-9放入一个数组,然后对第一位,随机生成一个10以内的数如:rand()%8+1(避免高位是0的情况),产生的随机数来取数组中的数,并把数组在该位置以后的数前移,即删掉该数字。。第二位用rand()%8,得到,从数组中取出该对应位置的数字作为第二位,然后删掉该数组。。。第三位用rand()%7,第四位用rand()%6。。。这样就可以生成一个四位无重复数字的四位数了

热心网友 时间:2023-10-23 06:35

楼上采用rand生成的是数组下标来取不同的数,这个方法不错,但是数组移位过于繁琐。如果对随即产生的后几位数字与前几位进行比较,相同则重新选择,就省了不少步骤和时间。
我的程序如下,因手头没有编译软件,未曾测试,请楼主试验。如有疏漏,敬请见谅!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int a[4];
int i,j;
int k;

srand(time(NULL));
do
{
a[0]=rand()%10;//产生首位随机数,对10取模得0~9的数字
}
while(a[0]==0);//若首位为零则重新选择

for(i = 1;i < 4; i++)
{
do
{
a[i]=rand()%10;//产生其它几位随机数
k=0;//置标记位为零,表示两数字相同
for(j = 0; j < i; j++)
{
if(a[i]==a[j])//若与前几位相同则跳出,重置a[i]
break;
else
k=1;//若不同,则该位有效,置标记k为1
}
}while(k!=1);
}
//输出结果,下面用k来表示该四位数,将a[4]转换为int的k
k=a[0];
for(i=1;i<4;i++)
{
k=k*10+a[i];
}
printf("%d ",k);
}
百度知道把我每一行前面的空格都删除了,程序可读性就差了,请楼主自行缩进各行。

热心网友 时间:2023-10-23 06:36

#include<stdio.h>

void main()
{
int i, j, k, m, n = 0;
for(i=1; i<10; i++)
for(j=0; j<10; j++)
for(k=0; k<10; k++)
for(m=0; m<10; m++)
if((i != j) && (i != k) && (i != m) && (j != k) && (j != m) && (k != m))
{
printf("%d%d%d%d ",i,j,k,m);
n++;
}
printf("\n四位无重复数字的四位数总共有%d个\n",n);
}

热心网友 时间:2023-10-23 06:36

我也写了一个,运行了没问题,我是根据一楼的算法写的。
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int j,n,e,b,c,d;
srand((unsigned)time(NULL));
n=rand()%9+1;
e=a[n];
for(;n<=8;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%8;
b=a[n];
for(;n<=7;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%7;
c=a[n];
for(;n<=6;n++)
a[n]=a[n+1];
srand((unsigned)time(NULL));
n=rand()%6;
d=a[n];

j=e*1000+b*100+c*10+d;
printf("这个随机的四位数为:%d",j);

}

热心网友 时间:2023-10-23 06:37

我觉得四楼写的程序简单易懂,适合初学者。而且可行。如果用VC编还得在
printf("\n四位无重复数字的四位数总共有%d个\n",n); 后加一行return;
编译就没问题了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
郎酒怎么分辨真假 郎酒买到假的怎么赔偿 如何除掉衣服上的超能胶迹 有什么方法洗掉"502超能胶水"??? 我想买块两三千元的玉,但又不知是否真假.不知玉器鉴别是怎样鉴的? 申请留学时间流程 95595光大银行,光大乐迷联名信用卡金卡额度多少 光大乐视卡是什么信用卡? 乐迷信用卡普卡额度大概是多少? ...sport的英语小作文,主题“打乒乓球”。初中水平 ps怎么画方框(ps怎么画方框线条) 羽毛球课程主要采取哪些教学方法 c语言中,提示输入一个4位数的整数,然后把每一位相加? 通俗易懂的羽毛球步法教学,来看看林丹怎么做的 C语言程序:写一个函数,输入一个4位数字,要求输出这4个数字字符,每两个数字字符间 C语言 只取4位有效数字 研究性学习的 如何提高羽毛球战术水平 ppT c语言 任意一个四位数,求各个位置上的数字并输出 羽毛球的技术要领 用c语言解决输入一个四位数,求由这四个数字组成的最大数与最小数字之差 羽毛球比赛详细规则是什么?有没有PPT? 用c语言编程?(输入一个四位数,求出它的个位、十位、百位、千位) 羽毛球规则羽毛球课程教学PPT模板 c语言 读取四位数字 羽毛球教学入门基本手法 中筒袜如何搭配才不会出错? 如何学羽毛球 打羽毛球的基本动作要领? 红色乐福鞋搭配什么颜色袜子 打羽毛球的基本动作要领有哪些? 黑色高简袜子搭配怎样的鞋子才最好?你知道吗? c语言取前4位数字 C语言,程序自动吧4位数字分别为:降序/升序. 用C语言程序编写“输入一个四位整数(如1234),使其倒序输出(如4321),并求其各位之和。” C语言、输入四位数、倒序输出。 C语言中的ascII码表怎么看,高四位,低四位又是什么呢? 使用c语言为4个数字abcd进行排序 用C语言如何将从键盘输入四位数,分解成4个数字 C语言编程 将四位数字分为一组进行加密,其中第一位和第三数字交换,第二位和第四位数字交换 用c语言编写 输入一个4位正整数,求各位数字的立方和 c语言怎么限定输出整数占四位 c语言产生4位随机数 下水道是什么 中国的下水道 下水道是什么时候被人类所发明的? 下水道结构是什么样的? 形容下水道的成语 下水道的水都是怎么处理的? 水是顺时针还是逆时针流入下水道的,为 称自己为下水道是什么意思 为什么下水道的盖子是圆的?