A. c语言如何随机打乱数组
int a[] = {3,5,7,1,4};
// 本程序考虑时间复杂度最小情况的乱序算法,O(t)=len-1
// 算法模仿彩票摇号,从全集中先取一个为第一位,再在剩余集合中取出一个为第2位,...
// 直至最后一个,只是考虑空间利用,已排序集合利用全集的空间。
int len=sizeof(a); // 全集元素数量
srand(unsigned(time(NULL))); // 摇号机准备
for(int i=len;i>1;i--) // 从全集开始摇号,直至只剩一个,已排在最后
{
int cur=len-i+(rand()%i); // 在剩余集合中摇号
int tmp=a[len-i]; // 当前序号位置挪空
a[len-i]=a[cur]; // 摇出的彩球放入当前序号
a[lcur]=tmp; // 放好剩余的彩球
}
B. c语言,逆序输出一组数,要求用到数组
可以定义一个字符数组,然后由用户输入字符,再从数组的后面向前一一输出字符,即可实现题目要求。下面在手机上用易历知食软件里的微C程序设计来编写一个示例程序,手机上的代码如下图:
#include<stdio.h>
intmain(intarg,char*args[])
{
charbuff[100];
inti,len;
printf("请输入一串字符
");
gets(buff);
printf("原字符是
%s
",buff);
printf("逆序后的字符是
");
len=strlen(buff);
for(i=len-1;i>=0;i--)
{
printf("%c",buff[i]);
}
return0;
}
C. 用C语言怎样打乱一组数据
#pragma
once
#include
<iostream>
#include
<Windows.h>
using
namespace
std;
#pragma
comment(
lib,
"winmm.lib"
)
int
main()
{
//定义一个数组(自己随便定义,这里以10个大小的数组为例)
const
int
iSum
=
10;
int
iAry[iSum]
=
{3,7,5,87,23,1,65,8,51,64};
//定义一个数组用来保存打乱顺序后的数
int
iDistrubAry[iSum]
=
{0};
//播随机种子(以便每次随机的值有相等的机会)
srand(timeGetTime());
//每次随机的不相同的数存到这个数组里(以便下次随机时判断随机的数是否已经随机过了)
int
iRandomData[iSum]
=
{0};
//将iRandomData元数都赋初值为-1,表示没有产生一个随机数
for
(
int
i=0;
i<iSum;
i++
)
{
iRandomData[i]
=
-1;
}
//共产生不同的随机的个数
int
iRandomSum
=
0;
//打乱这个数组
for
(
int
i=0;
i<iSum;
i++
)
{
//随机一个数
int
iRandom
=
rand()%iSum;
//判断iRandomSum是否为0,是0的话表示没有随机过任何数,就不用查询是否随机到这个数了
if
(
iRandomSum
!=
0
)
{
//用来判断是否连续随机(当随机的数与之前随机的有重复时就连续随机)
for
(
int
i=0;
i<iRandomSum;
i++
)
{
if
(
iRandom
==
iRandomData[i]
)
{
iRandom
=
rand()%iSum;
//i要赋值为-1,表示重新查询是否与以前随机的数重复
i
=
-1;
}
}
}
//将产生的随机数添加到RandomData里面
iRandomData[iRandomSum]
=
iRandom;
//将随机的数作为原来数组的索引,取出原来数组此索引的值保存在打乱后的数组中
iDistrubAry[iRandomSum]
=
iAry[iRandom];
//将iRandom加1,表明已经打乱好了一个数
iRandomSum++;
}
//显示未打乱的数组
cout<<"未打乱的数组:";
for
(
int
i=0;
i<iSum;
i++
)
{
cout<<iAry[i]<<"
";
}
cout<<endl;
//显示打乱后的数组
cout<<"打乱后的数组:";
for
(
int
i=0;
i<iSum;
i++
)
{
cout<<iDistrubAry[i]<<"
";
}
cout<<endl;
system(
"pause"
);
}
D. 用C语言对数组内元素乱序排列并输出
方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。 (代码我就不写了。)
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。
E. 用c语言初始化一个10个元素的数组,赋值为1-10,乱序后,输出; //(两种方法)
省去最后打印的printf循环部分。
①在插入的时候随机。
int a[10] = {0};
int num, i;
srand(time(NULL));
for (num = 1; num < 10; i++)
{
i = rand()% 10;
while (a[i] == 0)
i = rand()%10;
a[i] = num;
}
②先按1-10插入,然后打乱
int a[10];
int temp, pos;
srand(time(NULL));
for(i = 0; i< 10; i++)
a[i] = i + 1;
for (i = 0; i < 10; i++)
{
pos = rand()%10;
temp = a[i];
a[i] = a[pos];
a[pos] = temp;
}
F. 怎样用C语言打乱一个已排序的数组
如果要求不是很严格的话,感觉可以随机交换N次,每次交换,随机生成两个交换的元素的下标。
如果要求严格随机的话,感觉可以依次从数组里无放回的取数,并按照取数的先后顺序放入一个新的数组,然后新的数组就是打乱顺序之后的数组了。
G. C语言中如何将数组乱序
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
int a[] = {3,5,7,1,4};
int n=5;
int i,j,T=1000,tmp;
srand(unsigned(time(NULL)));
while(T--)
{
i=rand()%n;
j=rand()%n;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
for(i=0;i<n;i++)printf("%d ",a[i]);
puts("");
return 0;
}
H. C语言,读取txt文件,每行内容不变,乱序输出每行,思路
1)申请一个足够大的指向字符的指针数组,并把每一行字符串的首地址保存到这个数组中,假设有N行;
2)产生一个[0,N)的随机整数x,输出第x行的字符串。
3)将指针数组中第x个元素与第N-1个元素交换位置。
4)N=N-1,如果N>0则转2),否则结束。
I. c语言 输入一串字符 然后打乱顺序随机输出
你可以将输入的字符串放到数组中,然后通过随机函数生成数组下标(注意限制下标越界),然后输出就可以啦
J. C语言 把一个数组逆序输出
从最后一个元素,逆向遍历到数组的0元素,逐一输出即可实现。
1、创建数组;
2、输入值;
3、逆序遍历输出数组。
代码:intmain(){ inta[10]; inti;
for(i=0;i<10;i++)
scanf("%d",a+i);
for(i=9;i>=0;i--)
printf("%d",a[i]);}
(10)c语言怎么乱序输出数组扩展阅读:
将一个数组逆序输出。
1、程序分析:用第一个与最后一个交换。
2、程序源代码:
#define N 5
main()
{ int a[N]={9,6,5,4,1},i,temp;
printf(" original array: ");
for(i=0;i printf("%4d",a[i]);
for(i=0;i {temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf(" sorted array: ");
for(i=0;i printf("%4d",a[i]);}