EOJ 2015

本文通过一个具体的ACM竞赛题目,详细介绍了使用C语言解决该问题的过程。文章中包括了结构体定义、自定义比较函数及qsort排序函数的应用等知识点,并分享了解题过程中的调试经验。

#include <stdio.h>
#include <stdlib.h>
typedef struct{
	int ID;
    int Dis;
}ROOM;
int cmp(const void*a,const void*b)
{
	ROOM *p1=(ROOM*)a,*p2=(ROOM*)b;
    return p1->Dis > p2->Dis ? 1 : -1;
}
int main()
{
	int n,i;
    while((scanf("%d",&n))!=EOF){
		ROOM data[100];
		int flag=0;
		for(i=0;i<n;i++){
			int a[15][15];
			int id,dis,r,c;
			scanf("%d%d%d%d",&id,&dis,&r,&c);
			int j,p,count=0;
            getchar();
			for(j=0;j<r;j++){
				char *s=(char*)malloc(sizeof(char)*(c+1));
                gets(s);
				for(p=0;p<c;p++){a[j][p]=s[p]-'0';}
                for(p=0;p<c;p++)
                {
				 if(j==0&&p==0){if(a[j][p+1]==0&&a[j][p]==0)count++;}
				 if(j==0&&p==c-1){if(a[j][p-1]==0&&a[j][p]==0)count++;}
				 if(j==0&&p>0&&p<c-1){if(a[j][p-1]==0&&a[j][p+1]==0&&a[j][p]==0)count++;}
				 if(j>0&&p==0){if(a[j-1][p]==0&&a[j][p+1]==0&&a[j][p]==0)count++;}
				 if(j>0&&p==c-1){if(a[j-1][p]==0&&a[j][p-1]==0&&a[j][p]==0)count++;}
				 if(j>0&&p>0&&p<c-1){if(a[j][p+1]==0&&a[j-1][p]==0&&a[j][p-1]==0&&a[j][p]==0)count++;}
			   }
			}
            //printf("%d\n",count);
			if(count){data[flag].ID=id;data[flag].Dis=dis;flag++;}
            
		}
		if(!flag)printf("Bad Luck,Rocker!\n");
		else{
		   qsort(data,flag,sizeof(ROOM),cmp);
		   printf("%d\n",data[0].ID);
		}
    }
	system("pause");
	return 0;
}

咳咳 菜鸡进阶的路上总要装点逼

原题http://acm.ecnu.edu.cn/problem/2015/


一开始没有注意到矩阵每个元素间没有空格直接用了scanf简直傻透了。。。。没有全部输入完毕就判断六个if条件也是很危险啊啊喂 这个bug也找了很久。。。

话说现在真的是很害怕未经初始化的内存啊。。。memset,memcpy留下的阴影(滑稽脸)

(这个排版是要逼死强迫症吗!!!)

新年快乐~第一篇博客

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值