关于c语言常见问题的问题

关于C语言编程的一些问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
关于C语言编程的一些问题
上传于||文档简介
&&关​于​C​语​言​编​程​的​一​些​问​题
大小:1.48KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢共有 1646 人关注过本帖
标题:今天遇到一个有意思的问题,有关大数据的算法
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
结帖率:96%
&&已结贴√
&&问题点数:20&&回复次数:13&&&
今天遇到一个有意思的问题,有关大数据的算法
问题背景:有一个非常大的二维数组N,尽可能地找出其中最大的n个数,n为变量但远远小于N的数据规模。
注意:这个数组非常之大,以至于无法在合理的时间范围内对其进行遍历。暂且不讨论存储问题,假设数组已经完全存储在内存中了。
根据问题背景,允许运行结果不是最优解,但要在程序的运行时间合理的范围内尽可能接近最优解。
例如:要求找出前10个最大的数,最后可以只找到相对比较大的10个数(当然越接近正确答案越好)。
也允许这样的算法:即便给的时间无限长,最终也不能找到最优解,但可以快速地给出次优解。
问题是我根据实际情况抽象出来,自己描述的,可能有所偏差,如果对题目本身的叙述有问题,请继续提问。
补充1:这个二维数组描述的是一个地区的地形,每个点的数值都是表示海拔高度,所以变化相对平缓。
--------------------
有没有人有点想法?
[ 本帖最后由 蚕头燕尾 于
20:05 编辑 ]
搜索更多相关主题的帖子:
来 自:神界
等 级:贵宾
威 望:340
帖 子:11040
专家分:43662
倒数M个数值为相对较大的值&&&不遍历 如何获取到
DO IT YOURSELF !
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
回复 2楼 wp231957
已经补充了问题背景,请看一楼的:
学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Black Cat&&&&&&Hello Tomorrow~
等 级:贵宾
威 望:11
帖 子:322
专家分:1084
直觉感觉这种问题用数组来存储可能不好.&&第六感, 没有依据, 错了莫怪.
换一种存储方式, 造个等高线,是不是会好一些?
代码测试环境:&&WinXP+C-Free5.0.
等 级:职业侠客
帖 子:88
专家分:341
做一个环行的12`个元素的指针数组,放10个大数据排序
做 2个指向数组的指针,1个指大,1个指小
遍历数组一遍
比小指针小的,跳过
比大指针大的,无条件存入上面数组,两数组指针均加1
介于两指针之间的,插入上面数组,小指针加1
等 级:蜘蛛侠
帖 子:416
专家分:1035
随机选取一些点(或是根据情况划定一间隔取点),找出最大的,在最大的周围搜一圈
莫问前尘有愧,但求今生无悔
等 级:贵宾
威 望:27
帖 子:4422
专家分:4019
很简单,百度 快速选择
我就是真命天子,顺我者生,逆我者死!
等 级:贵宾
威 望:26
帖 子:734
专家分:3478
可以考虑采用梯度下降法,或者直接用标准的遗传算法。
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
回复 4楼 vvvcuu
这个二维数据是已知的唯一数据,要想从这个数据转换成登高线存储,
要先遍历这个数据?
要是只遍历一遍还好说,但是这个数据是动态变化的(变化频率相当可观),
所以动态绘制登高线是不是就有点不太划算了?
学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Black Cat&&&&&&Hello Tomorrow~
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:731
专家分:1546
回复 5楼 实际应用
做一个环行的12`个元素的指针数组,放10个大数据排序-----环行是什么意思?
做 2个指向数组的指针,1个指大,1个指小
遍历数组一遍----------------请仔细看一楼,数据规模很大,单是遍历就已经相当耗时了。
比小指针小的,跳过
比大指针大的,无条件存入上面数组,两数组指针均加1
介于两指针之间的,插入上面数组,小指针加1
学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Black Cat&&&&&&Hello Tomorrow~
版权所有,并保留所有权利。
Powered by , Processed in 0.039235 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言实现婚姻匹配有关问题 - C语言当前位置:& &&&C语言实现婚姻匹配有关问题C语言实现婚姻匹配有关问题&&网友分享于:&&浏览:4次C语言实现婚姻匹配问题
最近因为课程需要,看了看婚姻稳定匹配问题,用了两天把代码写完了。
具体问题就不详细写了,这里给出参看的网址。
EOJ上面的问题叙述:http://202.120.106.94/onlinejudge/problemshow.php?pro_id=162
整个思路结合着老师的课件和这篇文章,用C语言完成了整个代码。
MarriageMatch
Created by shadowdai on 11-11-27.
Copyright (c) 2011年 BUPTSSE. All rights reserved.
#include &stdio.h&
int main (int argc, const char * argv[])
int manPerference[3][3];//下标表示女士的号码,1-5,储存的值表示对该女士的好感度
int womanPerference[3];//表示5位女士选择的男士
int manMostLike[3];//表示男士最喜欢的女士
int manCurrentMatch[3];//表示当前男士的配对对象
int womanCurrentMatch[3];//表示当前女士的配对对象
int womanBool[3];//表示女士的配对状况,0表示未配对,1表示已经配对
int manBool[3];//表示男士的配对状况
int MatchNumber = 0;
printf("输入男士的好感度排名:(数字越大表示越喜欢)\n");
for (i = 0; i & 3; i++) {
printf("男士%d:\n",i+1);
for (j = 0; j & 3; j++) {
scanf("%d", &manPerference[i][j]);
//女士选择男士
for (i = 0; i & 3; i++) {
womanBool[i] = 0;
manBool[i] = 0;
Max = manPerference[0][i];
for ( j = 0; j & 3; j++) {
if (manPerference[j][i] & Max) {
Max = manPerference[j][i];
womanPerference[i] =
printf("\n女士的选择:\n");
for (i = 0; i & 3; i++) {
printf("女士No.%d选择%d\n",i+1, womanPerference[i]+1);
//选出男士最喜欢的女士
for ( i = 0; i & 3; i++) {
for ( j = 0; j & 3; j++) {
if (manPerference[i][j] == 3) {
manMostLike[i] =
printf("\n男士最喜欢的女士:\n");
for (i = 0; i & 3; i++) {
printf("No.%d男士选择了No.%d女士\n",i+1,manMostLike[i]+1);
printf("\n");
while (MatchNumber != 3) {
//根据男士和女士的选择的对象进行匹配
for (i = 0; i & 3; i++) {
if (womanBool[manMostLike[i]] == 0 && manBool[i] == 0) {
//如果该男士选择的女士没有配对,那么将他们配对
manCurrentMatch[i] = manMostLike[i];
womanCurrentMatch[manMostLike[i]] =
womanBool[manMostLike[i]] = 1;
manBool[i] = 1;
MatchNumber += 1;
printf("No.%d男士与No.%d女士配对,两位在此之前均没有配对。\n", i+1, manCurrentMatch[i]+1);
else if(womanBool[manMostLike[i]] == 1 && manBool[i] == 0){
//如果该女士已经配对,则需要比较该女士更喜欢哪位男士
if (womanPerference[manMostLike[i]] == i) {
//如果该女士选择的是该男士,那么直接进行配对
manCurrentMatch[i] = manMostLike[i];
womanCurrentMatch[manMostLike[i]] =
womanBool[manMostLike[i]] = 1;
manBool[i] = 1;
MatchNumber += 1;
printf("No.%d男士与No.%d女士配对,虽然该女士之前有配对对象,但是选择了该男士。\n", i+1, manCurrentMatch[i]+1);
else if( manPerference[i][manMostLike[i]] & manPerference[womanCurrentMatch[i]][manMostLike[i]]){
//如果该女士没有选择该男士,但是该女士现在的配对对象的优先级低于该男士,则将他们配对
manBool[womanCurrentMatch[manMostLike[i]]] = 0;
manCurrentMatch[i] = manMostLike[i];
womanCurrentMatch[manMostLike[i]] =
womanBool[manMostLike[i]] = 1;
manBool[i] = 1;
printf("No.%d男士与No.%d女士配对,虽然该女士之前有配对对象,但是更喜欢该男士。\n", i+1, manCurrentMatch[i]+1);
//如果该女士没有选择该男士,并且该男士的优先级低于该女士,那么该女士拒绝该男士
for ( j = 0; j & 3; j++) {
//该男士被拒绝之后,只能寻找下一个最喜欢的女士
if (manPerference[i][j] == manPerference[i][manMostLike[i]] -1) {
manMostLike[i] =
printf("No.%d男士没有配对成功,所以降低了选择的人士,现在他最喜欢No.%d女士。\n",i+1, j+1);
else if(manBool[i] == 1){
printf("No.%d男士已经配对成功。\n",i+1);
for (i = 0; i & 3; i++) {
printf("\nNo.%d男士与No.%d女士配对成功!\n", i+1, manCurrentMatch[i]+1);
如果有需要,请标明转载,谢谢!
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
学习ing,no end!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
2、注释符号里的双引号不起表示字符串的作用;(//&“we have a in this line.\n”)3、若果情况混乱则从头找起。(/* " */ " */ 不能被完全注释掉,错误之处在于,有人可能认为中间的*/在“”中,不起作用,事实上,该双引号不起标记字符串的作用,因此编译器在第一个*/处就认为注释结束,则这一行最后上下“*/)关于容易出错的注释的问题:1、int /*...*/i;该定义变量i的语句是正确的,有人易误解为当编译器把/*...*/去掉后为inti,会导致不正确,编译器确实会将注释剔除,但不是简单的剔除,而是用空格进行了替换。2、char* s = "abcdef //hijklmn";根据规则23、//is that a \volid comment?\符号位续行符,显然该两行都会被注释掉。4、in/*...*/注释被替换为空格了,则显然不能通过编译。5、/* /* */ */ &此情况是不正确的,因为注释不能嵌套。
阅读(861)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'关于C语言的注释问题',
blogAbstract:'三原则:1、字符串里的注释符号不起注释作用;(printf(“we have a // in this line.\\n”);字符串中的注释号显然不起作用,字符串被放入只读数据区)2、注释符号里的双引号不起表示字符串的作用;(//&“we have a in this line.\\n”)3、若果情况混乱则从头找起。(/* \" */ \" */ 不能被完全注释掉,错误之处在于,有人可能认为中间的*/在“”中,不起作用,事实上,该双引号不起标记字符串的作用,因此编译器在第一个*/处就认为注释结束,则这一行最后上下“*/)关于容易出错的注释的问题:1、int /*...*/i;该定义变量i的语句是正确的,有人易误解为当编译器把/*...*/去掉后为inti,会导致不正确,编译器确实会将注释剔除,但不是简单的剔除,而是用空格进行了替换。',
blogTag:'注释,编译器,字符串,不起,符号',
blogUrl:'blog/static/8',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:0,
permalink:'blog/static/8',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'学习ing,no end!',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 c语言常见问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信