PAT乙级练习题第一题采花生

#include 
#include 
int main(){
    int M,N,K;
    scanf("%d%d%d",&M,&N,&K);
    int a[M+1][N+1];//M是行数,为了让下标和行数对应,多要了一行 
    int i,j;
    //int k,w;
    int count=0;
    int temp_v,temp_k,temp_w;
    int SumStep=0,SumValue=0;

    struct node{
        int k;//用来保存不为0的行数 
        int w;//用来保存不为0的列数
        int v;//用来保存不为0的值 
    } b[M*N];
    //struct node *p=b;

    //读入数值 
    for(i=1;i<=M;i++){//为了让下标对应列数 
        for(j=1;j<=N;j++){//为了让下标对应行数 
            scanf("%d",&a[i][j]);
        }
    }

    //不为0的数的存储 
    for(i=1;i<=M;i++){
        for(j=1;j<=N;j++){
            if(a[i][j]!=0){

                b[count].k=i;
                b[count].w=j;
                //printf("%d ",a[i][j]);
                b[count].v=a[i][j]; 
                count++;//用来记录不为0的个数             
            } 
        }
    }

    //冒泡排序法:将不为0的值按从小到大排序 
    for(i=0;i<count;i++){
        for(j=0;j<count-1;j++){
            if(b[j].v>b[j+1].v){
                temp_k=b[j].k;
                temp_w=b[j].w;
                temp_v=b[j].v;

                b[j].k=b[j+1].k;
                b[j].w=b[j+1].w;
                b[j].v=b[j+1].v;

                b[j+1].k=temp_k;
                b[j+1].w=temp_w;
                b[j+1].v=temp_v;
            }
        }
    }

    //计算能采到多少花生 

    for(i=count-1;i>=0;i--){

        if(i==count-1){
            SumStep=fabs(b[i].k-0)+1+fabs(0-b[i].k);
            if(SumStep>K){
                printf("%d",SumValue);
                break;
            }
            SumValue=b[i].v;
            continue;
        }
        SumStep=SumStep+fabs(b[i].k-b[i+1].k)+fabs(b[i].w-b[i+1].w)+fabs(0-b[i].k)-fabs(0-b[i+1].k)+1;
        if(SumStep>K){
            printf("%d",SumValue);
            break;
        }else{
            SumValue=SumValue+b[i].v;
        }    
    } 
    return 0;
}
全部评论
点赞 回复 分享
发布于 2016-08-05 11:16

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务