| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1276 人关注过本帖
标题:[求助]请大家帮我看看这个程序
取消只看楼主 加入收藏
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
结帖率:87.5%
收藏
 问题点数:0 回复次数:5 
[求助]请大家帮我看看这个程序
我这有个 测试是不是逆序数的程序,可是我有的地方看不懂,请大家帮我分析下,我先这在谢谢了!

在线性代数里有这么一个概念:有一个数列,如21543,
1的前面有1个数比它要大,4的前面有1个数比它大,
3的前面有2个数比它大,总数是1+1+2=4
所以21543的逆序数就是4

#include <cstdio>

int main()
{
while(!scanf("%*d\n"))
{
// int c, i;
int s = 0, t, buf[256 * 2] = {0};
int *mipmap[] = {buf + 2, buf + 4, buf + 8, buf + 16, buf + 32, buf + 64, buf + 128, buf + 256};//这为什么这么定义?
while((t = getchar()) != '\n')
{
mipmap[7][t]++, t & 1 || (s += mipmap[7][t + 1]), t >>= 1;//这是什么意思?
mipmap[6][t]++, t & 1 || (s += mipmap[6][t + 1]), t >>= 1;
mipmap[5][t]++, t & 1 || (s += mipmap[5][t + 1]), t >>= 1;
mipmap[4][t]++, t & 1 || (s += mipmap[4][t + 1]), t >>= 1;
mipmap[3][t]++, t & 1 || (s += mipmap[3][t + 1]), t >>= 1;
mipmap[2][t]++, t & 1 || (s += mipmap[2][t + 1]), t >>= 1;
mipmap[1][t]++, t & 1 || (s += mipmap[1][t + 1]), t >>= 1;
mipmap[0][t]++, t & 1 || (s += mipmap[0][t + 1]);
/*
for (t = c, i = 0; i < 8; i++, t >>= 1)
{
mipmap[7 - i][t]++;
if (0 == (t & 1))
s += mipmap[7 - i][t + 1];
}
*/
}
printf("%d\n", s);
}
return 0;
}
搜索更多相关主题的帖子: int 逆序 
2007-09-05 15:27
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
收藏
得分:0 
楼上的不对,请看清要求!

就你上面那组:21543

当i=3时,j 不是从0再开始比较!

请大家帮我看看那两句什么意思?从家这个程序时间复杂度小啊!还有编译程序时出现这个提示:
nixu.cpp:35:2:warning :no newline at end of file

就像1楼那个程序也会出现这个!怎么办,才能不出现这个?
2007-09-06 09:29
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
收藏
得分:0 
/*
for (t = c, i = 0; i < 8; i++, t >>= 1)
{
mipmap[7 - i][t]++;
if (0 == (t & 1))
s += mipmap[7 - i][t + 1];
}
*/

这段是它的注释, 可是我还是看着迷惑!请各位朋友帮帮我,谢谢!
2007-09-06 09:45
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
收藏
得分:0 
int *mipmap[] = {buf + 2, buf + 4, buf + 8, buf + 16, buf + 32, buf + 64, buf + 128, buf + 256};这为什么这么定义?
while((t = getchar()) != '\n')
{
mipmap[7][t]++, t & 1 || (s += mipmap[7][t + 1]), t >>= 1;//这是什么意思?


请大家帮我看看这两句!回答这两句后面的问题啊!移位运算....?

[此贴子已经被作者于2007-9-7 21:03:08编辑过]

2007-09-07 20:59
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
收藏
得分:0 
1楼的程序就是好方法啊!还有注释!

自己再顶下,希望有人给我解释下,也就是说我也不懂这个程序的算法,谁可以帮我求出它的时间复杂度,还有帮我注释下它的意思,谢谢!
int *mipmap[] = {buf + 2, buf + 4, buf + 8, buf + 16, buf + 32, buf + 64, buf + 128, buf + 256};这为什么这么定义?
while((t = getchar()) != '\n')
{
mipmap[7][t]++, t & 1 || (s += mipmap[7][t + 1]), t >>= 1;这是什么意思?

[此贴子已经被作者于2007-9-12 9:50:20编辑过]

2007-09-12 09:49
青格儿
Rank: 4
等 级:贵宾
威 望:11
帖 子:698
专家分:20
注 册:2007-7-31
收藏
得分:0 
为什么没人帮我?这个问题太简单了,不值得回复下吗?
2007-09-19 10:49
快速回复:[求助]请大家帮我看看这个程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012518 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved