| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 600 人关注过本帖
标题:求助:北大PKU1007 acm
只看楼主 加入收藏
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:9 
求助:北大PKU1007 acm
#include<stdio.h>
#include<string.h>
int main()
{
    char a[101][52];
    long c[51]={0};
    int m,n,i,j,s,b,k;
    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
    {   
            scanf("%s",a[i]);
            a[i][m]='\0';
    }
    for(s=0;s<n;s++)
        for(i=0;i<m-1;i++)
            for(j=i+1;j<m;j++)
            {   
            if(a[s][i]>a[s][j])
                c[s]++;
            }
    for(i=0;i<n;i++)
    {
        b=c[0];
        s=0;
        if(c[0]==-1)
        {   
            k=1;
            while(c[k]==-1)
            {
                if(k==n) return 0;
                k++;
            }
            b=c[k];
            s=k;
        }
        for(j=0;j<n;j++)
        {   
            if(b >c[j] && c[j]!=-1)
            {
                b=c[j];
                s=j;
            }
        }
        c[s]=-1;
        //for(j=0;j<m;j++)
        //    printf("%c",a[s][j]);
printf("%s\n",a[i]);
   
    }                                            
return 0;
}

我自己测试了好几组数据,结果正确,可是平台上还是wrong answer。
实在研究不出来出错的原因 ,求各位帮帮忙。
谢谢!!
拜托各位了。
 
搜索更多相关主题的帖子: include 
2014-03-09 01:26
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
...

仰望星空...........不忘初心!
2014-03-09 06:23
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
你倒是把题目写出来呀。
2014-03-09 08:12
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
不好意思,是我的疏忽了
这道题是北大poj上的1007题,
题目链接在这里:http://
我现在又改了个错误,就是char型过小,会溢出,但还是wrong answer
我的算法确实不好,但是还是想知道错误的原因
求各位帮帮忙,谢谢!!!!
#include<stdio.h>
#include<string.h>
int main()
{
    char a[101][52];
    long c[51]={0};
    int m,n,i,j,s,b,k;
    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
    {   
            scanf("%s",a[i]);
            a[i][m]='\0';
    }
    for(s=0;s<n;s++)
        for(i=0;i<m-1;i++)
            for(j=i+1;j<m;j++)
            {   
            if(a[s][i]>a[s][j])
                c[s]++;
            }
    for(i=0;i<n;i++)
    {
        b=c[0];
        s=0;
        if(c[0]==-1)
        {   
            k=1;
            while(c[k]==-1)
            {
                if(k==n) return 0;
                k++;
            }
            b=c[k];
            s=k;
        }
        for(j=0;j<n;j++)
        {   
            if(b >c[j] && c[j]!=-1)
            {
                b=c[j];
                s=j;
            }
        }
        c[s]=-1;
        //for(j=0;j<m;j++)
        //    printf("%c",a[s][j]);
printf("%s\n",a[i]);
   
    }                                            
return 0;
}

2014-03-09 23:11
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
不好意思啊,printf("%s\n",a[i]);改成printf("%s\n",a[s]);
不过为什么还不行呢 ?     
2014-03-10 00:08
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
我最新的代码,还是不行,求助啊

#include<stdio.h>
#include<string.h>
int main()
{
    char a[101][52];
    int c[51];
    int m,n,i,j,s,b,k;
    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
    {   
            scanf("%s",a[i]);
            a[i][m]='\0';
    }
    for(s=0;s<n;s++)
    {
        c[s]=0;
        for(i=0;i<m-1;i++)
            for(j=i+1;j<m;j++)
            {   
            if(a[s][i]>a[s][j])
                c[s]++;
            }
    }
    for(i=0;i<n;i++)
    {
        b=c[0];
        s=0;
        if(c[0]==-1)
        {   
            k=1;
            while(c[k]==-1)
            {
                if(k==n) return 0;
                k++;
            }
            b=c[k];
            s=k;
        }
        for(j=0;j<n;j++)
        {   
            if(b >c[j] && c[j]!=-1)
            {
                b=c[j];
                s=j;
            }
        }
        c[s]=-1;
        //for(j=0;j<m;j++)
        //    printf("%c",a[s][j]);
        printf("%s\n",a[s]);
   
   
    }
return 0;
}



2014-03-10 00:28
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
早点睡吧..!

仰望星空...........不忘初心!
2014-03-10 00:41
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:5 
没看懂你后面一部分的思路,题目要求就是按照某种加权排序,你的数组C求出了加权,后面排序我改成了常用的选择法排序,你试试能行吗?
#include<stdio.h>
#include<string.h>
int main()
{
    char a[101][51],t[51];   //--加了一个数组用于交换串
   
    int c[100]={0};            //--串的数目< = 100
    int m,n,i,j,s,b,k;

    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
    {   
            scanf("%s",a[i]);
            a[i][m]='\0';
    }
   
    for(s=0;s<n;s++)   
    {
        c[s]=0;
        for(i=0;i<m-1;i++)        
            for(j=i+1;j<m;j++)
            {   
            if(a[s][i]>a[s][j])
                c[s]++;
            }
    }
    //选择法排序,按数组c同时排数组c和a
    for(i=0;i<n-1;i++)
    {   
        k=i;   
        for(j=i+1;j<n;j++)
            if(c[k]>c[j])k=j;  
        if(k!=i)
        {
            b=c[k];
            c[k]=c[i];
            c[i]=b;
            strcpy(t,a[k]);
            strcpy(a[k],a[i]);
            strcpy(a[i],t);
        }
    }
    for(i=0;i<n;i++)printf("%s\n",a[i]);
  return 0;
}
2014-03-10 09:40
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:5 
AC了, 用3个变量c, t, g保存字符C, T, G出现的次数,
字符是一个一个读取的, 若读取到A时, 看C, T, G出现了几次, 若读取到C, 看T, G出到了几次, c加1; 若读取到G, 看T出现了几次, g加1; 出现T, t加1;
用数组n[100]保存每个序列乱序的个数
.乱序的次数等于当出现这个字母时, 比它大的字母在前面出现次数的累加和.
例如序列TTTTGGCCAA, 一开始是四个T, 则t=4, 然后是两个G, 乱序的次数为4+4=8,g=2 然后是两个C, 次数为 8(前面的次数) +4+4+2+2=20,c=2 再是两个A, 次数为20+4+4+2+2+2+2 = 36;


12608925 pangshch 1007 Accepted 140K 0MS C 905B 2014-03-10 13:43:17
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int N, M;
    char s[100][51], ch;
    int n[100] = {0};
    int c, t, g;
    int i, j, k, min;

    scanf("%d%d", &N, &M);
    getchar();

    for (i = 0; i < M; i++) {
        c = t = g = 0;
        for (j = 0; j < N; j++) {
            ch = getchar();
            s[i][j] = ch;
            if (ch == 'A') {
                if (c != 0)
                    n[i] += c;
                if (t != 0)
                    n[i] += t;
                if (g != 0)
                    n[i] += g;
            }
            else if (ch == 'C') {
                c++;
                if (t != 0)
                    n[i] += t;
                if (g != 0)
                    n[i] += g;
            }
            else if (ch == 'G') {
                g++;
                if (t != 0)
                    n[i] += t;
            }
            else if (ch == 'T')
                t++;
        }
        s[i][j] = '\0';
        getchar();
    }

   

    for (i = 0; i < M; i++) {
        min = n[0];
        k = 0;
        for (j = 1; j < M; j++)
            if (min > n[j]) {
                min = n[j];
                k = j;
            }
        n[k] = 10000;               
        printf("%s\n", s[k]);
    }
    return 0;
}


 
2014-03-10 14:03
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
谢谢各位了,我明白错在哪里了,
int c[51];要改成int c[101];
一直注意a[][],却忘了c[],太粗心了啊
非常谢谢各位的帮助!!!!


2014-03-10 21:02
快速回复:求助:北大PKU1007 acm
数据加载中...
 
   



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

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