C++代码有错误地方,请看一下,哪里错了
#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;intget(intstart,i...
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int get(int start,int end) //取随机数函数
{
srand((unsigned int)time(NULL));
return rand()%(end-start+1)+start;
}
int main()
{
int Array_A[16];
int Array_B[17];
int Array_Get[6];
int min,temp,y,i,j;
for(i=1;i<=16;i++)
{
Array_A[i-1]=i;
}
for(j=17;j<=33;j++)
{
Array_B[j-1]=j;
}
/* m=2;n=4; */
for(int m=1;m<=2;m++)
{
Array_Get[m-1]=Array_A[get(1,16)];
}
for(int n=1;n<=4;n++)
{
Array_Get[n+1]=Array_B[get(17,33)];
}
/*排序*/
for(i=0;i<=5;i++)
{
for(j=0;j<6-i;j++)
{
if(Array_Get[j]>Array_Get[j+1])
{
temp=Array_Get[j];
Array_Get[j]=Array_Get[j+1];
Array_Get[j+1]=temp;
}
}
}
for(int i=0;i<6;i++)
{
cout<<"第"<<i<<"个大的数是"<<Array_Get[i]<<endl;
}
return 0;
} 展开
#include <cstdlib>
#include <ctime>
using namespace std;
int get(int start,int end) //取随机数函数
{
srand((unsigned int)time(NULL));
return rand()%(end-start+1)+start;
}
int main()
{
int Array_A[16];
int Array_B[17];
int Array_Get[6];
int min,temp,y,i,j;
for(i=1;i<=16;i++)
{
Array_A[i-1]=i;
}
for(j=17;j<=33;j++)
{
Array_B[j-1]=j;
}
/* m=2;n=4; */
for(int m=1;m<=2;m++)
{
Array_Get[m-1]=Array_A[get(1,16)];
}
for(int n=1;n<=4;n++)
{
Array_Get[n+1]=Array_B[get(17,33)];
}
/*排序*/
for(i=0;i<=5;i++)
{
for(j=0;j<6-i;j++)
{
if(Array_Get[j]>Array_Get[j+1])
{
temp=Array_Get[j];
Array_Get[j]=Array_Get[j+1];
Array_Get[j+1]=temp;
}
}
}
for(int i=0;i<6;i++)
{
cout<<"第"<<i<<"个大的数是"<<Array_Get[i]<<endl;
}
return 0;
} 展开
5个回答
展开全部
错误主要在前面初始化、随机数生成和排序,看下面注释(改后正确,可拷贝试验):
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int get(int start,int end) //取随机数函数
{
// srand((unsigned int)time(NULL));//随机数种子只需要一次就行,否则又是从头开始取生成伪随机系列中的值,就不随机了
return rand()%(end-start+1)+start;
}
int main()
{
int Array_A[16];
int Array_B[17];
int Array_Get[6];
int min,temp,y,i,j;
srand((unsigned int)time(NULL));//随机数种子,放这儿
for(i=1;i<=16;i++)
{
Array_A[i-1]=i;
}
for(j=17;j<=33;j++)
{
Array_B[j-17]=j;//Array_B的下标范围是0-16,所以方括号中要减17,否则越界
}
/* m=2;n=4; */
for(int m=1;m<=2;m++)
{
Array_Get[m-1]=Array_A[get(1,16)-1];//Array_A下标范围是0-15,所以方括号中1-16的随机数要减1。实际上可以直接用get(0,15)来产生,更简洁
}
for(int n=1;n<=4;n++)
{
Array_Get[n+1]=Array_B[get(17,33)-17];//Array_B下标范围是0-16,所以方括号中17-33的随机数要减17。实际上可以直接用get(0,16)来产生,更简洁
}
/*排序*/
for(i=0;i<=5;i++)
{
for(j=i;j<6;j++)//范围改成这样
{
if(Array_Get[i]>Array_Get[j])//原来的j+1有可能越界,取到6,改成这样
{
temp=Array_Get[j];
Array_Get[j]=Array_Get[i];
Array_Get[i]=temp;
}
}
}
for(int i=0;i<6;i++)
{
cout<<"第"<<i<<"个大的数是"<<Array_Get[i]<<endl;
}
return 0;
}
展开全部
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int get(int start,int end) { //取随机数函数
return rand()%(end - start + 1) + start;
}
int main() {
int Array_A[16];
int Array_B[17];
int Array_Get[6];
int temp,i,j,k;
srand((unsigned int)time(NULL)); // 在main()函数中初始化
for(i = 0; i < 16;i++) Array_A[i] = i + 1;
for(i = 0; i < 33;i++) Array_B[i] = i + 1;
for(i = 0; i < 3; ++i) Array_Get[i] = Array_A[get(1,16) - 1];
for(i = 3; i < 6;++i) Array_Get[i] = Array_B[get(17,33) - 1];
/*排序*/
for(i = 0;i < 5;i++) {
k = i;
for(j = i + 1;j < 6;j++) {
if(Array_Get[k] < Array_Get[j])
k = j;
if(k != i) {
temp = Array_Get[i];
Array_Get[i] = Array_Get[k];
Array_Get[k] = temp;
}
}
}
for(i = 0;i < 6;i++) {
cout << "第" << i + 1 << "个大的数是" << Array_Get[i] << endl;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
排序算法有问题
for(i=0;i<=5;i++)
{
for(j=0;j<6-i;j++)
{
这儿6改成5。现在这样数组都越界了。随机数算法没随机成功。。。时间太短,每次给的time(NULL)种子是一样的。
追问
那种子该怎么改呢,能说一下吗? 你回答是对的
追答
随机数函数多加个参数,让每次srand()函数的参数多加个1就可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-16
展开全部
VC6.0的一个缺点就是把for语句内定义的变量当成在语句外定义的一样。你的变量i前面已经定义过了所以就造成了重复定义了。你可以在开始的时候定义一个变量i 这样后面用的时候就不用定义了。而且换成别的编程环境时也不会出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你排序排出来的是升序,所以输出的是第i小的数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |