50到90的随机输入任意整数编程程c++

50道C++编程练习题及解答_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
50道C++编程练习题及解答
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢NOIP复赛 c++-明明的随机数(算法和原码参考) | 红颜丽人
NOIP复赛-明明的随机数(算法和原码参考)
问题描述-明明的随机数】明明想在学校中请一些同学一起做问卷调查,为了实验的客观性,他先用计算机生成了N 个1 到1000 之间的随机整数,(N≤100),对于其中重复的数字,只保留一个,把其余相
同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好
的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
【输入文件】
输入文件random.in 有2 行,第1 行为1 个正整数,表示所生成的随机数的个数:N
第二行有N 个用空格隔开的正整数,为所产生的随机数。
【输出文件】
输出文件random.out 也是2 行,第1 行为1 个正整数M,表示不相同的随机数的个数。
第2 行为M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
【输入样例】
20 40 32 67 40 20 89 300 400 15
【输出样例】
15 20 32 40 67 89 300 400
/*本题主要是考察对排序算法的掌握,只不过外加了一个去重的操作。本题的算法有很多,我们在考试时,时间紧,题目难度大。如果我们能用最简单的思维方式解决问题的话,就不一定把很多的时间放在代码执行效率的优化问题上。有时候牺牲一点空间(内存)和时间对于获取更多的考试时间是非常有必要的。本题最简单的思想方法,就是根据题目要求,先对给定的一组数据进行排序,排序的方法可以使用最简单的冒泡算法来完成。由于本题的输出结果要求我们必须先统计出不重复数据的个数,所以当数据排序之后,我们可以先对所有的数据遍历一次,这一次遍历的目的就是让我们统计出不重复数据的个数,并将其输出。最后,我们还需进行一次遍历,这次遍历用于打印出排序之后不重复的所有数据结果.
#include &stdio.h&
int main()
FILE *fp1,*fp2;
int N,M=0;
int num[100]; //根据题目所给的数据规模定义数组的大小
if((fp1=fopen(“random.in”,”r”))==NULL)
printf(“cannot open file\n”);
fscanf(fp1,”%d”,&N); //输入随机数的个数
for(i=0;i&N;i++)
fscanf(fp1,”%d”,&num[i]); //将已知的随机数存放到初始数组中
for(i=0;i&N;i++) //第一步:对所有数据进行排序(冒泡排序)
for(j=i+1;j&N;j++)
if(num[i]&num[j])
num[i]=num[j];
fp2=fopen(“random.out”,”w”); //打开写文件的指针
for(i=0;i&N;i++) //第二步:本次遍历主要是统计出不重复数据的个数
if(i&0&&num[i]==num[i-1]) //思考一下这个去重的操作中为什么有i&0这个条件
fprintf(fp2,”%d\n”,M); //在结果文件中打印出不重复数据的个数 并键入一个回车符
for(i=0;i&N;i++) //第三步:本次遍历是将不重复的数据打印到结果文件中
if(i&0&&num[i]==num[i-1]) //思考一下这个去重的操作中为什么有i&0这个条件
fprintf(fp2,”%d “,num[i]);
fclose(fp1);
fclose(fp2);
http://www.gzkg.net/show.aspx?id=117&cid=356
本文链接地址:
本条目发布于 。属于
分类。作者是 。C++程序题(解答)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++程序题(解答)
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
你可能喜欢23:55 提问
求解答!c++中自动随机产生100个在0~1000之间的整数并排序为什么会出现只产生50个数???
void bubble_up(int list[],int count)
for(int i=0;i
for(int j=count-1;j&1;j=j-1)
if(list[j-1]&list[j])
int tmp=list[j-1];
list[j-1]=list[j];
int main()
int array[100]={0};
srand((unsigned)time(NULL));
cout&&"总共有以下100个数字:"&&
for(i=0;i&101;i++)
int numtemp=rand()%1000;
cout&&array[i]&&"\t";
bubble_up(array,100);
cout&&"对原100个数字排序后的结果是:"&&
for(i=0;i&101;i++)
cout&&array[i]&&"\t";
按赞数排序
恩,首先,循环次数有问题
其次,for中多用了个i++;
还有,排序算法有问题。
最后,好好学习吧加油
void bubble_up(int list[], int count)
for (int i = 0; i
for (int j = 0; j
if (list[j]&list[i])
int tmp = list[j];
list[j] = list[i];
int main()
int array[100] = { 0 };
srand((unsigned)time(NULL));
cout && "总共有以下100个数字:" &&
for (i = 0; i&100; i++)
int numtemp = rand() % 1000;
array[i] =
cout && array[i] && "\t";
bubble_up(array, 100);
cout && "对原100个数字排序后的结果是:" &&
for (i = 0; i&100; i++)
cout && array[i] && "\t";
上面代码显示有问题
1.for循环,去掉后面i++
for (i = 0; i
int numtemp = rand() % 1000;
array[i] =
void bubble_up(int list[], int count)
for (int i = 0; i
for (int j = 0; j
if (list[j]&list[i])
int tmp = list[j];
list[j] = list[i];
3.将101改为100
其他相似问题
相关参考资料新浪广告共享计划>
广告共享计划
C++中的随机数函数
C++中产生随机数种子对于初学者一直都很困惑.大家知道,在C中有专门的srand(N)函数可以轻松实现这一功能,然而在C++中则要复杂一些.下面是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依然要借助C标准库中的rand()函数)
& 函数说明:
rand();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&:返回从[0,MAX)之间的随机整数,这里的MAX与你所定义的数据类型而定;需#include
&& void srand( unsigned seed
);&&&&&&&&&&&&&&&&&&&&&&&&&:设置随机数种子,#include
&& time_t time( time_t *time
);&&&&&&&&&&&&&&&&&&&&&&&&&:返回当前时间,#include
应用举例:
srand(time(0));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//根据系统时间设置随机数种子
int i = rand() %
N;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//取得区间[0,N)的整数
如要产生1~10之间随机数,则代码如下:
#include &iostream&
#include &ctime&
#include &cstdlib&
int main()
srand(time(0));&&&&&&
t = rand() % 10+
// random number 1-10
srand(time(0));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//根据系统时间设置随机数种子
float x = rand() * x /
RAND_MAX;&&&&&&&&&&&&&&&&&&&&&&&&&
//返回1/x的概率
srand(time(0));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//根据系统时间设置随机数种子
vector&int&
v;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
////随机访问数组类型,#include
random_shuffle(v.begin(),
v.end());&&&&&&&&&&&&&&//STL算法random_shuffle把容器类的元素顺序捣乱
以下源码来自crafty19.3,最强的源码开放的chess程序。注释很清楚,无需多言。
1.Knuth的书中是怎么讲的?该书我无缘拜读。
2.static const unsigned long
x[55],这里取55个随机数的理由是什么?
3.能否比较全面地讲讲随机数产生的一些算法或理论,或推荐一些参考资料?
unsigned int Random32(void) {
&&& static const
unsigned long x[55] = {
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL,
UL, UL, UL, UL, UL
&&& static int
&&& static
unsigned long y[55];
&&& static int
&&& unsigned
for (i = 0; i & 55; i++) y[i] = x[i];
j = 24 - 1;
k = 55 - 1;
&&& ul = (y[k]
&&& if (--j
& 0) j = 55 - 1;
&&& if (--k
& 0) k = 55 - 1;
return((unsigned int)ul);
对于初学者来说,只需熟练掌握1)种用法,更深层次的随着水平的提升自然会有所领悟.
一、C++中不能使用random()函数&&&&&
random函数不是ANSI
C标准,不能在gcc,vc等编译器下编译通过。可改用C++下的rand函数来实现。&&&&&
1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。
RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。
3、比较理想的是用变化的数,比如时间来作为随机数生成器的种子。
time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。
// C++随机函数(VC program)
#include &stdio.h&
#include &iostream&
#include &time.h&
#define MAX 100
int main(int argc, char* argv[])
&&&&&//srand()函数产生一个以当前时间开始的随机种子.
//应该放在for等循环语句前面不然要很长时间等待
srand( (unsigned)time( NULL ) );
   for (int i=0;i&10;i++)
cout&&rand()%MAX&&//MAX为最大值,其随机域为0~MAX-1
   return 0;
二、rand()的用法&&
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。这样,如果你要产生0~10的10个整数,可以表达为:
  int N = rand() % 11;
这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:
  int N = 1 + rand() % 11;
  总结来说,可以表示为:
  a + rand() % n
其中的a是起始值,n是整数的范围。   a + rand() %
就表示 a~b之间的一个随机数若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依
通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand(
)函数进行随机化,随着seed的不同,就能够产生不同的随机数。
如大家所说,还可以包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 java0到100整数随机数 的文章

 

随机推荐