【杭电错题】#1海选女主角——数组的锅

题目:

海选女主角

potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。
“做什么比较挣钱呢?筛沙子没力气,看大门又不够帅…”potato老师很是无奈。
“张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。
嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。
说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out!
由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪…
面试那天,刚好来了mn个MM,站成一个mn的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。
一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。
分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。
特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。

Input 输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
Output 对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。

Sample Input
2 3
1 4 -3
-7 3 0

Sample Output
2 1 -7


问题描述:

平台反馈:
Status Compilation Error
0_0_33849018_1781.c
0_0_33849018_1781.c(13) : error C2057: 应输入常量表达式
0_0_33849018_1781.c(13) : error C2466: 不能分配常量大小为 0 的数组
0_0_33849018_1781.c(13) : error C2087: “a”: 缺少下标
0_0_33849018_1781.c(13) : error C2133: “a”: 未知的大小

在Dev C++上编译运行无报错 但在平台提交时报错

@zrainj
#include <stdio.h>
#include <math.h>

int main()
{
	int row, column;
	while ( scanf ( "%d %d", &row, &column ) != EOF )
	{
		if ( row==0 && column==0 )
			break;
			
		//create a two-dimensional array.
		int a[row+1][column+1];
	
		//load in the data into the right place.
		//and find out the max.
		int temp=0;
		int mark1=1;
		int mark2=1;
		for ( int i=1; i<=row; i++ )
			for ( int j=1; j<=column; j++ )
			{
				scanf ( "%d", &a[i][j] );
				if ( abs(temp) < abs(a[i][j] ) )
				{
					temp = a[i][j];
					mark1 = i;
					mark2 = j;
				}
			}
			
		//output the result.
		printf ( "%d %d %d\n", mark1, mark2, temp );
	}
	return 0;
}

原因分析:

这是因为数组大小必须是常量,而不能是变量或变量表达式(C99之后支持用变量定义数组大小,这也是自己编译没有错但平台不通过的原因)


解决方案:

解决方案一(伪解决):
讲数组的大小定义的尽可能大 使其符合平台检测的数据范围 如数组大小改为:

		//create a two-dimensional array.
		int a[1000][1000];

解决方案二(用malloc动态定义数组大小):

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>

int main()
{
	int row, column;
	while ( scanf ( "%d %d", &row, &column ) != EOF )
	{
		if ( row==0 && column==0 )
			break;
			
		//create a two-dimensional array.
		int **a;
		int k;
		a = (int**)malloc((row+1)*sizeof(int*));
		for ( k=0; k<(row+1); k++ )
		a[k] = (int*)malloc((column+1)*sizeof(int));

注意!!在最后记得要free!养成良好的习惯!
两题均AC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值