| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 382 人关注过本帖
标题:不知道哪错了,求指错!
取消只看楼主 加入收藏
Sandy143
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2015-3-23
结帖率:66.67%
收藏
已结贴  问题点数:15 回复次数:1 
不知道哪错了,求指错!
标题:小朋友排队

    n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。

    每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。

    如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。

    请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。

    如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。

【数据格式】

    输入的第一行包含一个整数n,表示小朋友的个数。
    第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。
    输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。

例如,输入:
3
3 2 1
程序应该输出:
9

【样例说明】
   首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。




我这样编,哪错了,麻烦大神们告诉我
#include<stdio.h>
#define MAX 100000
int main(){
    long i,j,k,l,n,temp,sum=0;
    int count=0;
    long a[MAX];
    long b[MAX];
    scanf("%ld",&n);
    for(i=1;i<=n;i++){
        scanf("%ld",a[i]);
    }
    for(i=1;i<=n;i++){
        b[i]=0;
    }
    for(i=1;i<=n-1;i++){
        for(j=1;j<=n-i;j++){
            if(a[j]>a[j+1]){
            temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
            k=a[j];l=a[j+1];
            b[k]++;
            b[l]++;
            }
        }
    }
    for(i=1;i<=MAX;i++){
        while((b[i]!=0)&&(count<=n)){
            sum+=(b[i]*(1+b[i])/2);
            count++;
        }
    }
    printf("%ld",sum);
    return 0;
}
搜索更多相关主题的帖子: 小朋友 
2015-04-03 22:03
Sandy143
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2015-3-23
收藏
得分:0 
每个人都交换了两次,第一次不高兴度是1;第二次不高兴度是3(增加2),总共就是(1+2)*3=9 喽,会有奇数的
2015-04-04 14:25
快速回复:不知道哪错了,求指错!
数据加载中...
 
   



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

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