计导大作业一点头绪也没有,想不到算法,连暴力都不知道往哪儿用力,话说我还没找到组织,有没有哪个大佬组能把我收了。。。

还是那个北航同学,又扔过来道题目,挺简单的,就是嵌套排序用的不太利索了。

#include <stdio.h>
typedef struct _item
{
	int x;
	int y;
	int vi;
	int pi;
} Item;

int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	int nn=n*n;//整个大小是n*n
	Item sheet[nn];//把所有的标志存到一个线性的结构数组里
	int i,j,tmp;
	for(i=0;i<n;++i)
		for(j=0;j<n;++j)
		{
			sheet[i*n+j].x=i+1;
			sheet[i*n+j].y=j+1;
			scanf("%d",&sheet[i*n+j].vi);
		}
	//保存坐标和vi
	for(i=0;i<nn;++i)
		scanf("%d",&sheet[i].pi);
	//读入pi
	int order[nn];
	for(i=0;i<nn;++i) order[i]=i;//创建嵌套排序辅助数组

	for(i=1;i<nn;++i)
		for(j=0;j<nn-i;++j)
			if((sheet[order[j]].vi)<(sheet[order[j+1]].vi))
			{
				tmp=order[j];
				order[j]=order[j+1];
				order[j+1]=tmp;
			}
//嵌套的冒泡排序,顺序存在order数组里
	int loc=order[0],max_vi=sheet[order[0]].vi,min_pi=sheet[order[0]].pi;
//默认最优解是order[0],之后检查后再换
	for(i=1;i<nn;++i)
	{
		if(sheet[order[i]].vi!=max_vi) break;//说明vi变小了,不是在最大之中找了
		if(sheet[order[i]].pi<min_pi)//pi更小是更优解
		{
			min_pi=sheet[order[i]].pi;
			loc=order[i];
		}
	}
	printf("%d %d\n",sheet[loc].x,sheet[loc].y );	
	return 0;
}

稍微改进一下

#include <stdio.h>

int main(int argc, char const *argv[])
{
	int n;scanf("%d",&n);
	int nn=n*n;
	int vi[nn],pi[nn];
	int i;

	for(i=0;i<nn;++i) scanf("%d",&vi[i]);
	for(i=0;i<nn;++i) scanf("%d",&pi[i]);

	int max_vi=vi[0],pin=0,max_loc[nn];
	max_loc[pin++]=0;
	for(i=0;i<nn;++i)
		if(vi[i]==max_vi) max_loc[pin++]=i;
		else if(vi[i]>max_vi)
		{
			pin=0;
			max_loc[pin++]=i;
			max_vi=vi[i];
		}

	int min_pi=pi[max_loc[0]],loc=max_loc[0];
	for(i=1;i<pin;++i)
		if(pi[max_loc[i]]<min_pi)
		{
			min_pi=pi[max_loc[i]];
			loc=max_loc[i];
		}

	printf("%d %d\n",loc/n+1,loc%n+1 );
	return 0;
}

buaacoding G.CWD的套圈游戏

相关文章:

  • 2021-08-27
  • 2021-10-17
  • 2021-07-29
  • 2022-12-23
  • 2021-05-11
  • 2021-12-03
猜你喜欢
  • 2021-11-08
  • 2022-12-23
  • 2022-01-26
  • 2021-05-16
  • 2021-11-27
  • 2021-09-29
  • 2021-12-26
相关资源
相似解决方案