• 【矩阵】


    Description

    给一个n*n的矩阵A,它的每一个元素Ai,j都是整数( 0 <= i < n, 0 <= j < n )。在每一行i( 0 <= i < n )给一个右移操作,使第i行的整数整体向右移动一个位置,最右边的整数将会移动到最左端的那一列。 
    你可以在任意行做右移操作,这样你会得到一个新的矩阵,对于新的矩阵你当然也可以做右移操作。你的任务就是求列最小值ColMin,它是所有得到矩阵的列最大值中的最小值。 
    max(0 <= j < n){Cj|Cj=Σ0<=i < nAi,j}

    Input

    可能包含多次输入。第一行是一个整数n,接下来n行每行包含n个整数,这些数据就是n*n的矩阵A的元素。如果输入仅含有-1的一行,就表示输入终止。其中1 <= n <= 7 而且 |Ai,j| < 104 。

    Output

    对于每组测试,打印一行包含一个数值,它在一个矩阵中是列最大值,但是在所有的变换矩阵中又是列最小值。

    Sample Input

    2 4 6 3 7 3 1 2 3 4 5 6 7 8 9 -1

    Sample Output

    11 15

    HINT

    例如: 



    4 6 

    3 7 

    列最大值是:13 

    右移操作: 

    6 4 

    3 7 

    列最大值是:11 

    右移操作: 

    4 6 

    7 3 

    列最大值是:11 

    右移操作: 

    6 4 

    7 3 

    列最大值是13 

    显然在所有的变换矩阵中列最大值是小是11

     
    嗯.....这题对我来说有点绕......妈蛋,废话少说,上代码!
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<stdlib.h>
    void move(int i,int number);
    void add(int number);
    void wowmove(int i,int number);
    void print(int number);
    int cmp ( const void *a , const void *b )
    {
    return *(int *)b - *(int *)a;
    }
    int a[7][7];
    int b[7];
    int MAX;
    int MIN; 
    int main()
    {
    	
    	int i,j,k;
    	int number;
    	while(scanf("%d",&number)!=EOF)
    	{
    		if(number==-1)break;
    		memset(a,0,sizeof(a));
    		memset(b,0,sizeof(b));
    		for(i=0;i<number;i++)
    		{
    			for(j=0;j<number;j++)
    			{
    				scanf("%d",&a[i][j]);	
    			}
    		}
    		add(number);
    		qsort(b,number,sizeof(b[0]),cmp);
    		MIN=b[0];
    		wowmove(1,number);
    		printf("%d
    ",MIN);
    	}
    	return 0;
    }
    void wowmove(int i,int number)//开始递归!
    {
    	int k;
    	if(i==number)
    	return;
    	for(k=0;k<number;k++)
    	{
    		wowmove(i+1,number);
    		move(i,number);
    		add(number);
    		qsort(b,number,sizeof(b[0]),cmp);
    		MAX=b[0];
    		if(MIN>MAX)MIN=MAX;
    	}
    } 
    void print(int number)
    {
    	for(int i=0;i<number;i++)
    	{
    		for(int j=0;j<number;j++)
    		{
    			printf("%d ",a[i][j]);
    		}
    		printf("
    ");
    	}
    	printf("
    ");
    	
    }
    void move(int i,int number)
    {
    	int j;
    	int c;
    	c=a[i][number-1];
    	for(j=number-1;j>0;j--)
    	{
    		a[i][j]=a[i][j-1];
    	}
    	a[i][0]=c;
    }
    
    void add(int number)
    {
    	int i,j;
    	for(j=0;j<number;j++)
    	{
    		b[j]=0;
    		for(i=0;i<number;i++)
    		{
    			b[j]=b[j]+a[i][j];	
    		}
    	}
    }
    

      

  • 相关阅读:
    python小练习
    python学习笔记
    google测试之道读书笔记一
    webservice头部认证
    我们需要什么样的测试?
    pt-ioprofile在CentOS7上无法运行的解决办法
    推荐Nginx系列文章
    linux开启coredump的3种方法
    55, select/poll returned error
    centos ftp安装
  • 原文地址:https://www.cnblogs.com/zhko11993/p/3809955.html
Copyright © 2020-2023  润新知