编程小练习(4)
题目:随机生成500个大于1小于1000的正整数
计算这500个数中10个最大的数之和 #include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
#include "time.h"
//不排序的方法里面用到的一个function
int GetMinIndex(WORD nSort[], int iCount)
{
int iRet = 0;
for (int i=1; i<iCount; i++)
{
if (nSort > nSort)
{
iRet = i;
}
}
return iRet;
}
int main(int argc, char* argv[])
{
WORD nSort = {0};
srand(unsigned int(time(NULL)));
for (int i=0; i<500; i++)
{
//2~999
// 0~997 + 2=>2~999
nSort = rand()%998 + 2;
}
WORD wCount = 0;
//冒泡排序
for (i=0; i<500; i++)
{
WORD iminIndex = i;
for (int j=i+1; j<500; j++)
{
if (nSort>nSort)
{
nSort ^= nSort;
nSort ^= nSort;
nSort ^= nSort;
}
}
}
for (i=490; i<500; i++)
{
wCount += nSort;
}
printf("冒泡排序的结果:%d \n", wCount);
//下面是桶排序
WORD wSortTemp = {0};
for (i=0; i<500; i++)
{
wSortTemp]++;
}
int j=0;
for (i=0; i<1000; i++)
{
while (wSortTemp--)
{
nSort = i;
j++;
}
}
wCount = 0;
for (i=490; i<500; i++)
{
wCount += nSort;
}
printf("桶排序的结果:%d\n", wCount);
//下面是不排序
WORD wSortBig = {0};
for (i=0; i<10; i++)
{
wSortBig = nSort;
}
for (i=10; i<500; i++)
{
int iIndexMin = GetMinIndex(wSortBig, 10);
if (wSortBig < nSort)
{
wSortBig = nSort;
}
}
wCount = 0;
for (i=0; i<10; i++)
{
wCount += wSortBig;
}
printf("不排序的结果:%d\n", wCount);
return 0;
}
本帖最后由 blueapplez 于 2010-2-28 15:35 编辑
回复 2# blueapplez
其实这样有点不能说明问题, 因为第一个排序就把原数组给修改了 下面这样比较能说明问题
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
#include "time.h"
//不排序的方法里面用到的一个function
int GetMinIndex(WORD nSort[], int iCount)
{
int iRet = 0;
for (int i=1; i<iCount; i++)
{
if (nSort > nSort)
{
iRet = i;
}
}
return iRet;
}
int main(int argc, char* argv[])
{
WORD nSort = {0};
WORD wCount = 0;
//初始化数据...
srand(unsigned int(124272));
for (int i=0; i<500; i++)
{
//2~999
// 0~997 + 2=>2~999
nSort = rand()%998 + 2;
}
//冒泡排序
for (i=0; i<500; i++)
{
WORD iminIndex = i;
for (int j=i+1; j<500; j++)
{
if (nSort>nSort)
{
nSort ^= nSort;
nSort ^= nSort;
nSort ^= nSort;
}
}
}
for (i=490; i<500; i++)
{
wCount += nSort;
}
printf("冒泡排序的结果:%d \n", wCount);
//重置数据...
srand(unsigned int(124272));
for (i=0; i<500; i++)
{
//2~999
// 0~997 + 2=>2~999
nSort = rand()%998 + 2;
}
//下面是桶排序
WORD wSortTemp = {0};
for (i=0; i<500; i++)
{
wSortTemp]++;
}
int j=0;
for (i=0; i<1000; i++)
{
while (wSortTemp--)
{
nSort = i;
j++;
}
}
wCount = 0;
for (i=490; i<500; i++)
{
wCount += nSort;
}
printf("桶排序的结果:%d\n", wCount);
//重置数据...
srand(unsigned int(124272));
for (i=0; i<500; i++)
{
//2~999
// 0~997 + 2=>2~999
nSort = rand()%998 + 2;
}
//下面是不排序
WORD wSortBig = {0};
for (i=0; i<10; i++)
{
wSortBig = nSort;
}
for (i=10; i<500; i++)
{
int iIndexMin = GetMinIndex(wSortBig, 10);
if (wSortBig < nSort)
{
wSortBig = nSort;
}
}
wCount = 0;
for (i=0; i<10; i++)
{
wCount += wSortBig;
}
printf("不排序的结果:%d\n", wCount);
return 0;
} 本帖最后由 chenyuzheng 于 2010-2-28 16:33 编辑
#include "stdio.h"
#include "stdlib.h"
#define size 500
void main()
{ int r,i,j,max,isum=0;
int a;
//观看了楼上的代码后,真是醍醐灌顶,所以这里应该加句srand(time(0))函数比较合乎情理.
for(i=0;i<500;i++){
r=1+rand()%999;//1到999之间的数
a=r;}
for(i=0;i<10;i++)
{ for(j=0;j<500-i;j++)
if(a<a)max=a;
else max=a; //找出10个最大的数
isum=max+isum; }
printf("%d",isum);
}
我没有误解题目意思吧?
请指教! 我没有误解题目意思吧?
请指教!
chenyuzheng 发表于 2010-2-28 15:52
for(i=0;i<10;i++)
{ for(j=0;j<500-i;j++)
if(a<a)max=a;
else max=a; //找出10个最大的数
isum=max+isum; }
这里排序/选最大算法有问题
题目是要 isum = 大小排名前十的10个数之和 本帖最后由 chenyuzheng 于 2010-2-28 16:52 编辑
不是吧!我就找了最大的10个数,其他数字大小我就不找.
for(j=0;j<500-i;j++)
{if(a<a)max=a;
else max=a;}加括号吗? 不是吧!我就找了最大的10个数,其他数字大小我就不找.
for(j=0;j
chenyuzheng 发表于 2010-2-28 16:49 http://bbs.52pojie.cn/images/common/back.gif
for(j=0;j<500-i;j++)
{if(a<a)max=a;
else max=a;}
假设 4 2 1 3
用你的算法来获取最大的
4 < 2 不成立max = 4
2 < 1 不成立然后max就变成2了
所以最后得到的只是最后两个数的较大值 本帖最后由 chenyuzheng 于 2010-2-28 17:59 编辑
#include "stdio.h"
#include "stdlib.h"
#include"time.h"
#define size 501
void main()
{ int r,i,j,max,isum=0,t;
int a;
srand(time(0));
for(i=0;i<500;i++)
{ r=2+rand()%998;
a=r;}
for(i=0;i<10;i++)
{ for(j=0;j<500-i;j++)
if(a<a)max=a;
else t=a,a=a,a=t;
isum+=max;
}
printf("%d\n",isum);
}:handshake:handshake:handshake..............
应该是这样了.
斑竹!!!这个应该没问题吧? 冗长的是我的
#include <iostream>
#include <ctime>
int main() {
srand(unsigned (time(NULL)));
//随机500个数字
unsigned rand_no;
for (int i = 0;i < 500;++i) {
rand_no = (rand()%998 + 2);
}
//冒泡啊冒泡
for (int y = 0,temp;y < 500;++y) {
for (int j = 499;j > y;j--) {
if (rand_no > rand_no) {
temp = rand_no;
rand_no = rand_no;
rand_no = temp;
}
}
}
//排序测试
// for (int x = 0;x < 500;++x){
// std::cout << "" << rand_no;
// }
//输出
unsigned sum = 0;
for (int x = 0;x < 10;++x) {
sum += rand_no;
}
std::cout << sum << std::endl;
}
这个抄考别人的
#include <iostream>
#include <algorithm>
#include <ITERATOR>
#include <vector>
#include <ctime>
struct rand_from_1_to_1000 {
int operator () () {
return (rand()%998 + 2);
}
};
int main() {
srand(unsigned (time(NULL)));
std::vector <int> v;
std::generate_n(std::back_inserter(v), 500, rand_from_1_to_1000());
std::sort(v.begin(), v.end());
unsigned sum = 0;
for (int i = 499;i > 489;i--) {
sum += v;
}
std::cout << sum << std::endl;
} ..............
应该是这样了.
斑竹!!!这个应该没问题吧?
chenyuzheng 发表于 2010-2-28 17:32 http://bbs.52pojie.cn/images/common/back.gif
还是有问题
如果最后一个数不是最大的十个数之一则结果会错误
另外效率也非常低
页:
[1]
2