[PTA] Experimento 7-2-8 Encuentra un punto de silla (20 puntos)

ps: varios dolores de cabeza al aprender matrices, ahora revíselo

Experimento 7-2-8 Encuentra un punto de silla


Portal
El "punto de silla" de un elemento de matriz significa que el valor del elemento en esa posición es el más grande en la fila y el más pequeño en la columna.

Esta pregunta requiere escribir un programa para encontrar el punto de silla de una matriz cuadrada dada de orden n.

Formato de entrada:
introduzca la primera línea para obtener un número entero positivo n (1≤n≤6). Las siguientes n líneas, cada línea da n números enteros, separados por espacios.

Formato de
salida : muestra la posición del punto silla en una fila en el formato de "subíndice de columna de subíndice de fila" (el subíndice comienza desde 0). Si el punto de silla no existe, se emite "NONE". La pregunta garantiza que la matriz dada tiene como máximo un punto de silla.

Ejemplo de entrada 1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

Muestra de salida 1:

2 1

Ejemplo de entrada 2:

2
1 7
4 1

Muestra de salida 2:

NONE

La solución 1
toma esta entrada como ejemplo.
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
Primero atraviesa la primera fila, encuentra el 7 más grande, y luego atraviesa la columna donde se encuentra 7, 7> 6, no un punto de silla → atraviesa En la segunda fila, encuentre el 8 más grande en la fila y atraviese la columna donde se encuentra el 8. 8> 7 no es un punto de silla → atraviese la tercera fila ... Finalmente, encuentre el 6 en la tercera fila y la segunda columna;
código:

#include<stdio.h>
int main()
{
    
    
	int n,a[7][7];scanf("%d",&n);
	for(int i=0;i<n;i++)for(int j=0;j<n;j++)scanf("%d",&a[i][j]);
	for(int i=0;i<n;i++)
	{
    
    	
		int max_j=0,flag=0;
		for(int j=0;j<n;j++)
		if(a[i][j]>=a[i][max_j]) max_j=j;
		for(int k=0;k<n;k++)
		if(a[i][max_j]>a[k][max_j]) {
    
    flag=1;break;}
		if(!flag)	{
    
    printf("%d %d",i,max_j);   return 0;}
	}
	printf("NONE");return 0;
}

Método 2
para abrir dos matrices de memoria en cada fila y cada columna de un máximo a un mínimo.
Finalmente, si las salidas coinciden, la coincidencia no será NINGUNA;
código:

#include<stdio.h>
#include<string.h>
int a[7][7],maxx[7],minn[7];//分别存每一行最大以及每一列最小 
int main()
{
    
    
	int n;scanf("%d",&n);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			scanf("%d",&a[i][j]);
			
	memset(minn,99, sizeof(minn));//这一步很关键(不可省略,要让初始化的minn足够大才能存入最小值) 
	
	for(int i=0;i<n;i++){
    
    
		for(int j=0;j<n;j++)
			if(maxx[i]<a[i][j])
				maxx[i]=a[i][j];//每一行的最大值
		for(int j=0;j<n;j++)
			if(minn[i]>a[j][i])
				minn[i]=a[j][i];//每一列的最小值 
	}
	for(int i=0;i<n;i++)//开始配对,如果配对成功输出并且结束
		for(int j=0;j<n;j++)
			if(minn[i]==maxx[j]){
    
     
				printf("%d %d",j,i);
				return 0;
			}
	printf("NONE");
}

Juzga la matriz triangular superior


Experimento 7-2-5 Juzgando el
código de la matriz triangular superior :

#include<stdio.h>
int a[11][11];
int main()
{
    
    	
	int k;scanf("%d",&k);
	while(k--)
	{
    
    
		int n;scanf("%d",&n);
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				scanf("%d",&a[i][j]);
		for(int i=1;i<n;i++)
			for(int j=0;j<i;j++)
				if(a[i][j]!=0)
				{
    
    
					printf("NO\n");
					goto end; 	
				}
		printf("YES\n");
		end:    ;//因为不想写标记,就直接使用goto了
	}
}

Cuadrado espiral


Experimento 7-2-9 espiral cuadrado
espiral cuadrado
solución de portal Gangster dibujar solución de comodidad:
una respuesta cómoda Gangster

#include<stdio.h>
int main()
{
    
    
	int a[11][11],n,i,j,k,dir,x=0,y=0;
	k=1,dir=0;
	scanf("%d",&n);
	int band0=n-1,band1=n-1,band2=0,band3=1;
	while(k<=n*n)
	{
    
    
		if(0==dir)
		{
    
    
			a[x][y++]=k++;
			if(y==band1)
			{
    
    dir=1,band0--;}
		}
		else if(1==dir)
		{
    
    
			a[x++][y]=k++;
			if(x==band1)
			{
    
    dir=2,band1--;}
		}
		else if(2==dir)
		{
    
    
			a[x][y--]=k++;
			if(y==band2)
			{
    
    dir=3,band2++;}
		}
		else if(3==dir)
		{
    
    
			a[x--][y]=k++;
			if(x==band3)
			{
    
    dir=0,band3++;}
		}
	 } 
	 for(i=0;i<n;i++)
	 {
    
    
	 	for(j=0;j<n;j++)
	 		printf(" %2d",a[i][j]);
	 	printf("\n");
	 }
	
}


Matriz en espiral de preguntas similares:
línea en espiral de la pregunta real de PAT
. El método de bucle solo admite datos pequeños (eficiencia demasiado baja). Una vez que encuentre grandes datos, solo podrá encontrar las reglas , escribiré y jugaré

#include<stdio.h>
struct band{
    
    
	int x,y;
}b1,b2,b3,b0;
int main()
{
    
    	
	int dir=0;//dir 0-3,0左 1上 2右,3下 
	b0.x=-1,b0.y=0;
	b1.x=-1,b1.y=1;
	b2.x=1,b2.y=1;
	b3.x=1,b3.y=-1; 
	int x=0,y=0,dis=0;
	int X,Y;//目标;
	scanf("%d%d",&X,&Y);
	while( (x!=X)||(y!=Y) )//注意这里不是 (x!=X)&&(y!=Y)
	{
    
    
		if(dir==0)
		{
    
    
			x--,dis++;
			if(x==b0.x&&y==b0.y)
			{
    
    b0.x--,b0.y--,dir=1;}
		}
		else if(dir==1)
		{
    
    
			y++,dis++;
			if(y==b1.y&&x==b1.x)
			{
    
    b1.x--,b1.y++,dir=2;}
		}
		else if(dir==2)
		{
    
    
			x++,dis++;
			if(x==b2.x&&y==b2.y)
			{
    
    b2.x++,b2.y++,dir=3;}
		}
		else if(dir==3)
		{
    
    
			y--,dis++;
			if(x==b3.x&&y==b3.y)
			{
    
    b3.y--,b3.x++,dir=0;}
		}
	} 
	printf("%d",dis);
}

Supongo que te gusta

Origin blog.csdn.net/weixin_49640089/article/details/112908770
Recomendado
Clasificación