社区
C语言
帖子详情
很急啊,简单问题
delphimm
2005-01-10 12:51:44
输入5个分数, 然后输出名次,分数越高,名次越低!
比如 5 4 6 7 8 输出 2 1 3 4 5
什么思路呢? 最好是效率最高?
...全文
389
33
打赏
收藏
很急啊,简单问题
输入5个分数, 然后输出名次,分数越高,名次越低! 比如 5 4 6 7 8 输出 2 1 3 4 5 什么思路呢? 最好是效率最高?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shenailin
2005-01-25
打赏
举报
回复
呵呵 !
排序啊 , 找数据结构书copy一段就OK了 !
qingyuan18
2005-01-25
打赏
举报
回复
void count(int a[],int n) /* n为输入的数的个数*/
{
int b{MAX] = {0};
int i,j;
int temp;
for(i =1;i<MAX;i++)
{
b[i-1] =i;
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp= b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%d",b[i]);
}
}
pcboyxhy
2005-01-24
打赏
举报
回复
这个办法好
QuickKeyBoard
2005-01-24
打赏
举报
回复
如果你的整数都是小范围的数,(比如不过32767),可以考虑用空间换时间的方法。加个Hash就可以了,读入O(n), 建Hash O(n), 整理O(n), 输出O(n),全算上O(4n)完事。
我列出的程序考虑了并列的排名,比如:1 1 2得到的名次序列为1 1 3。
#include <stdio.h>
#include <stdlib.h>
#define N 10
int Hash[1000], data[N], Rank[1000];
void main()
{
int i;
long s;
setmem(Hash, 1000*sizeof(int), 0);
setmem(Rank, 1000*sizeof(int), 0);
randomize();
for ( i=0; i< N; i++)
data[i] = random(10)+1;
for ( i=0; i<N; i++)
Hash[data[i]]++;
for (s=0, i=0; i<1000; i++)
if (Hash[i])
{
if (s==0)
{
Rank[i] = 1;
s = Hash[i];
}
else
{
Rank[i] = s + 1;
s += Hash[i];
}
}
for ( i=0; i<N; i++)
printf("%d %d\n", data[i], Rank[data[i]]);
}
不知是否符合要求,请楼主指正...
xuelong_zl
2005-01-24
打赏
举报
回复
mark
ybt631
2005-01-23
打赏
举报
回复
还有一种更好的算法,代码如下:基本思想跟sleep说的差不多
typedef struct{
int data;
int LastPosi;
}AA;
void quicksort1(AA a[],int m,int n) //用其他时间复杂度为o(nlogn)的排序算法也可以
{
int i,j;
AA temp;
if(m>=n) return;
i=m;
j=n;
temp=a[i]; //以a[m]为枢轴
while(i<j)
{
while(temp.data<=a[j].data&&i<j)
j--;
a[i]=a[j];
while(temp.data>=a[i].data&&i<j)
i++;
a[j]=a[i];
}
a[i]=temp;
quicksort1(a,m,i-1);
quicksort1(a,i+1,n);
}
void mingci(int a[],int c[],int n)
{
int i,j;
AA *aa=new AA[n];
for(i=0;i<n;i++)
{aa[i].data=a[i]; aa[i].LastPosi=i;}
quicksort1(aa,0,n);//以data为关键字对结构体aa排序;
for(i=0;i<n;i++)
{
j=i;
while(aa[j].data==aa[j-1].data&&j>0)
j--;
c[aa[i].LastPosi]=c[aa[j-1].LastPosi]+1;
}
delete []aa;
}
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 4
#define MAX 7
main()
{
int a[N],c[N];
int i;
srand(time(NULL));
for(i=0;i<N;i++)
a[i]=rand()%MAX+1; //随机产生的数
for(i=0;i<N;i++)
printf("%6d",a[i]);
printf("\n");
mingci(a,c,N);
for(i=0;i<N;i++)
printf("%6d--%6d\n",a[i],c[i]);
printf("\n");
}
ybt631
2005-01-23
打赏
举报
回复
有点错误,c重复定义了,去掉定义项中的c[n]
ybt631
2005-01-23
打赏
举报
回复
用改进的记数排序更好!时间复杂度虽然仍然是O(n^2),但常数项小
void countsort2(int a[],int c[],int n)
{
//a记录分数,c记录每个分数的名次,即a[i]的名次是c[i]
int i,j,c[n];
for(i=0;i<n;i++)
c[i]=1;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]) c[i]++;
else c[j]++;
}
wojiushiwo226547
2005-01-23
打赏
举报
回复
可不可以找一个通用的方法啊
我决的这方法好象不是很通用 啊 有局限性啊。。。////???
清泉ys
2005-01-11
打赏
举报
回复
我觉的这个问题就是数组的排序问题
szywelcome
2005-01-11
打赏
举报
回复
关键理解循环比较那块
# include "stdio.h"
struct AAA
{
int value;
int n;
};
void main()
{
int i;
int j;
AAA a[5];
for(i=0;i<5;i++)
{
scanf("%d\n",&a[i].value);
a[i].n =1;
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if (i!=j && a[i].value>a[j].value)
a[i].n++;
}
}
for (i=0;i<5;i++)
{
printf("%d %d\n",a[i].value,a[i].n);
}
}
3DO314li
2005-01-11
打赏
举报
回复
可以使用STL中的set,效率应该不错。
methuselah
2005-01-11
打赏
举报
回复
排遍序不可以吗?
Roaming_Sheep
2005-01-10
打赏
举报
回复
如果我有相同的两个数,想得到的名次也一样,但是希望名次可以挨着,即:
输入 1 1 2 2 3
输出 1 1 2 2 3
如何实现?各位指教。
————————————————
我写的算法可以,只要在填写排序后的位置的时候,改为填写排序后名次(允许相同值)即可
代码实现我不管
bjstcm
2005-01-10
打赏
举报
回复
如果我有相同的两个数,想得到的名次也一样,但是希望名次可以挨着,即:
输入 1 1 2 2 3
输出 1 1 2 2 3
如何实现?各位指教。
haichao0991
2005-01-10
打赏
举报
回复
大家好,我是一个初学者,有一个问题:
我和同学用的同一张VC安装盘,系统同是2000,结果他的VC里有ADO Data控件,可是我的却没有,这是为什么啊?我怎样才能插入ADO Data控件啊?
说具体点就是如何在下面步骤的结果中能填加ADO控件:
VC6.0/新建工程/Project/Add to Project/Components and Controls/打开Gallery/打开Registered ActiveX Controls
上面的文件夹里应该有Microsoft ADO Data Control这个控件的,可是我却没有,怎么回事事?
winstonch
2005-01-10
打赏
举报
回复
嗯我的算法是不对,谢谢 Roaming_Sheep(Roaming Sheep)
bjstcm
2005-01-10
打赏
举报
回复
晕,慢了,,算我上面的没说~~~
bjstcm
2005-01-10
打赏
举报
回复
我怎么感觉楼上的运算过程有些不对呢?
BlackEagle_
2005-01-10
打赏
举报
回复
思路跟一楼的差不多,用一个结构体实现
struct AAA {
int value; //分数值
int n; //名次
};
void main() {
int i;
int j;
struct AAA a[5];
for(i = 0; i < 5; i++) {
scanf("%d", &a[i].value);
a[i].n = 1;
}
for(i = 0; i < 5; i++) {
for(j = 0; j < 5; j++) {
if(i != j && a[i].value > a[j].value)
a[i].n++;
}
}
for(i = 0; i < 5; i++) {
printf("%d %d\n", a[i].value, a[i].n);
}
}
====================================
输入:
5
4
6
7
8
输出:
5 2
4 1
6 3
7 4
8 5
加载更多回复(13)
人工智能领域存在的
问题
问题
人工智能领域存在的三大
问题
:框架
问题
、符号关联
问题
和特征量
问题
。对应于人的能力就是:如何思考,如何联想,如何理解。 概念 框架
问题
(如何思考):机器遇到
问题
不知道用什么知识去解决
问题
,就是不知道如何思考,需要人为设定,比如人类和机器都没有学习过脑筋
急
转弯
问题
,然后给他们出一个脑筋
急
转弯的
问题
,机器就不知道用什么知识解决,但是人类可以思考来回答这个
问题
。而机器要回答这个
问题
就需要脑筋
急
转弯
问题
的知识。在这个
问题
上,人类知道如何运用其他知识产生一个脑筋
急
转弯
问题
知识,而机器不会。
简单
来说就是人类知道需要
《花雕学AI》21:ChatGPT能否应对脑筋
急
转弯?逻辑推理和创造性思维的大考验!
当我们谈到脑筋
急
转弯时,很多人都会感到兴趣和好奇。脑筋
急
转弯是一种智力游戏,可以锻炼我们的思维能力以及解决
问题
的能力。然而,对于许多人来说,脑筋
急
转弯也是一项相当具有挑战性的任务。在这个过程中,我们需要运用逻辑推理、上下文理解等能力才能解决
问题
。随着技术的发展,ChatGPT作为一种自然语言处理算法,已经开始探索如何应用于脑筋
急
转弯
问题
的解决中。通过利用机器学习技术和大数据集,ChatGPT可以帮助我们更好地理解脑筋
急
转弯
问题
,并提供准确的答案。
【读书笔记】《解决
问题
最
简单
的方法》
部分引言:在书中,我们将总结来自心理学家、数学家、商业顾问、竞技高手,甚至军事战略家的智慧,并将提供给读者多项大脑练习和自我评估方案,并附有各种有趣的背景信息和名人轶事。我们的目的只有一个:帮助你用最
简单
最聪明的方式解决生活中、工作中遇到的
问题
。 从网上下载了PDF版电子书,看了一个多小时,书中有好多测试题和一些类似于脑筋
急
转弯的题,让我发现思维方式对于解决
问题
有很大影响,但是思维方式估计是
急
什么,这个时侯不能
急
!
记得有一次,写代码。明明已经写好了,进行了测试。但是换到另外一个操作系统上,竟然出错了。当时很着
急
,不知道出错在哪里了,我的老师看到这个情况,对我说:“
急
什么?别着
急
。这个时侯不能
急
!慢慢调试一下。越
急
越调试不出来。” 后来,我静下心来调试,终于把
问题
找到了。
这个很
简单
在制订计划时,我们很少有人指出任务中可能存在难题和风险,只要认为可执行,就觉得很
简单
。而在完成任务的过程中,出现了这样那样的
问题
,一个内存错误BUG可能花掉你一天时间,一个小
问题
可能让你陷入绝望,这时才明白锅儿是铁打的,后悔当初牛皮吹大了。任务时间超期了,最终任务也勉强完成了,松了一气,但没过多长时间,好了伤疤忘了痛,又渐渐盲目乐观起来。周而复始,到现在为止,自己还没有改掉这个坏习惯。有次面试时,
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章