首页 > 其他分享 >5.14二维数组——右移,平移,鞍点计算

5.14二维数组——右移,平移,鞍点计算

时间:2024-05-14 10:34:30浏览次数:16  
标签:右移 count int 99 ++ num 5.14 鞍点

1.矩阵平移问题

题目如下:

给定一个 n×n 的整数矩阵。对任一给定的正整数 k<n,我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置,平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。

输入格式:

输入第一行给出 3 个正整数:n(<100)、k(<n)、x(<100),分别如题面所述。

接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

输出格式:

在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7 2 99
11 87 23 67 20 75 89
37 94 27 91 63 50 11
44 38 50 26 40 26 24
73 85 63 28 62 18 68
15 83 27 97 88 25 43
23 78 98 20 30 81 99
77 36 48 59 25 34 22

输出样例:

440 399 369 421 302 386 428

样例解读

需要平移的是第 2、4、6 列。给定 k=2,应该将这三列顺次整体向下平移 1、2、1 位(如果有更多列,就应该按照 1、2、1、2 …… 这个规律顺次向下平移),顶端的空位用 99 来填充。平移后的矩阵变成:

11 99 23 99 20 99 89
37 87 27 99 63 75 11
44 94 50 67 40 50 24
73 38 63 91 62 26 68
15 85 27 26 88 18 43
23 83 98 28 30 25 99
77 78 48 97 25 81 22

以下是代码:

#include<stdio.h>
int main(void) {
	int n, k, x;
	scanf("%d%d%d", &n, &k, &x);
	int num[101][101];
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			scanf("%d", &num[i][j]);
		}
	}
    //以下则是这个代码的关键部分
	int m = 1, count = 0;          //设置了两个计数器,主要是便于count的增加和重置
	for (j = 1; j < n; j += 2) {   //这个循环是为了控制操作的列是偶数列
		count = m;                
		m++;
		if (m > k) {
			m = 1;
		}
		for (i = n - 1; i >= 0; i--) {
			num[i][j] = num[i-count][j];//前面的数将后面的数覆盖了,模拟向下平移
			if (i < count) {            //这是到了每一列开头的count个数那里,置换为x
				num[i][j] = x;
			}
		}
	}
	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum = 0;
		for (int j = 0; j < n; j++) {
			sum += num[i][j];
		}
		printf("%d", sum);
		if (i < n - 1) {
			printf(" ");
		}
	}
	return 0;
}
//这个代码不知道是哪里出了问题
#include<stdio.h>
int main(void) {
	int n, k, x;
	scanf("%d%d%d", &n, &k, &x);
	int num[101][101];
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			scanf("%d", &num[i][j]);
		}
	}
	int m = 1, count = 0;
	for (j = 1; j < n; j += 2) {
		count = m;
		m++;
		if (m > k) {
			m = 1;
		}
		for (i = n - 1; i >= 0; i--) {
			num[i][j] = num[i-count][j];
			if (i < count) {
				num[i][j] = x;
			}
		}
	}
	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum = 0;
		for (int j = 0; j < n; j++) {
			sum += num[i][j];
		}
		printf("%d", sum);
		if (i < n - 1) {
			printf(" ");
		}
	}
	return 0;
}

2.方阵循环右移

本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。

输入格式:

输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。

输出格式:

按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。

输入样例:

2 3
1 2 3
4 5 6
7 8 9

输出样例:

2 3 1 
5 6 4 
8 9 7 

 


#include<bits/stdc++.h>
using namespace std;
#define N 10
int a[N][N];
int main(){
    int n,m;
    cin>>m>>n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>a[i][j];
        }
    }
    m%=n;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<<a[i][(n-m+j)%n]<<' ';
        }cout<<endl;
    }
    return 0;
}

3.鞍点计算

找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。同一行和同一列没有相同的数。

输入格式:

输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。

输出格式:

按下列格式输出鞍点:

Array[i][j]=x

其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。

一个二维数组并不一定存在鞍点,此时请输出None。

我们保证不会出现两个鞍点的情况,比如:

3 3
1 2 3
1 2 3
3 6 8

输入样例:

3 3
1 2 3
4 5 6
7 8 9

输出样例:

Array[0][2]=3
#include <stdio.h>
void FindSpecialPoint(int m, int n);
int main(void) {
	int m, n;
	scanf("%d%d", &m, &n);
	FindSpecialPoint(m, n);
}
void FindSpecialPoint(int m, int n) {
	int arr[m][n];
	int i, j, flag = 0;
	int  min, max, k, h;
	int col[n];
	for (i = 0; i < m; i++) {
		for (j = 0; j < n; j++) {
			scanf("%d", &arr[i][j]);
		}
	}
	for (i = 0; i < m; i++) {
		max = arr[i][0];
		for (j = 1; j < n; j++) {  //找每一行最大
			if (max < arr[i][j]) {
				max = arr[i][j];
			}
		}
    //确定每一行最大的那一个的列数是多少
		for (h = 0, k = 0; h < n; h++){ //h来控制遍历列的循环,一共n列嘛
			if (arr[i][h] == max) { //有一个等于max,就往col里装上他的列数
				col[k] = h;
				k++;//数组col下一个(比如说col[1])准备好,同时k还可以表明有几个最大点}
			}
		}
		min = max;
       //确定在确定的每一行最大的那个数在每一列是不是最小的
		for (j = 0; j < k; j++) {
			for (h = 0; h < m; h++) {
				if (arr[h][col[j]] < min)
					break;
			}
			if (h == m) {
				printf("Array[%d][%d]=%d", i, col[j], max);
				flag++;
			}
		}
	}
	if (flag == 0)
		printf("None");
}

 

标签:右移,count,int,99,++,num,5.14,鞍点
From: https://www.cnblogs.com/sly-345/p/18190746

相关文章

  • el-table(V 2.15.14)在使用树结构表格并且设置align = 'center'后 树结构层级不明显问
    开发中遇到的小问题:如图所示三个层级区分并不明显,用户体验差解决方案:自定义CSS:首先取消此列的align="center"然后插入以下代码(此CSS为更改图示第二列的样式如果是其它列请自己获取样式名称)//标题居中::v-deepth.el-table_1_column_2.is-leaf.el-table__cell{t......
  • VS2022+QT5.14.2开发VS QT Tool的使用
    1.安装环境vs2022+QT5.14.2qtvstool(vsaddin)的使用遇到的坑1.安装qt-vsaddin-msvc2022-3.0.2.vsix安装失败2.安装qt-vsaddin-msvc2022-2.8.0.vsix在qtSetting->qtmodels模块管理中,没有Selectmodel的功能选项如下图位置3.卸载版本vsaddin_2.8.0后安装qt-vsaddin-msvc2......
  • Qt5.14.2 剪贴板之巧——Qt让“复制粘贴“更高效
    作为现代图形界面程序的标配功能,剪贴板操作在日常办公和编程中无疑是最常见的场景之一。而在Qt的疆场内,大神们也为我们准备了一手利器——QClipboard类,让复制粘贴操作变得前所未有的简单高效。今天,就让我们一睹究竟,领略Qt大神们在这方面的非凡功力吧!一、QClipboard的惊......
  • Qt5.14.2 无所不能的Qt数据库操作之旅
    身为程序员,数据库无疑是我们最为亲密无间的好伙伴。但如何高效地操作数据库,却一直是一个令人颇感棘手的难题。不过,没关系,我们的Qt大神们早已为此开辟出一条华丽绝伦的大道,就让我带你一览他们的绝世数据库操作艺术吧!一、查询驱动,方能驱车万里在对数据库开展操作之前,我......
  • Qt5.14.2论Qt大神如何华丽操控计算机系统
    身为一名程序员,难免要与计算机系统打交道。而要想高效地和系统沟通、指挥它为我们工作,最好的办法莫过于拥有一个强大的跨平台开发框架了。今天,就让我们一同领略Qt大神如何在此领域内驰骋自如,优雅地操控系统完成各种任务吧!第一弹:潜力无限,Qt大神从获取信息开始作为系统......
  • pc鼠标左右移动
     constmovable=useRef<any>(null) consthandle=()=>{  letisDragging=false;  letstartX:any;  movable.current.addEventListener('mousedown',(e:any)=>{    isDragging=true;    startX=e.clientX-movable.c......
  • QT5.14.2 Qt5组件随心所欲,从界面到实用一把抓
    Qt5作为跨平台的C++图形界面框架,自带了丰富的组件供我们使用。无论是构建精美的UI界面,还是满足各种实用的需求,Qt5总能为我们意趣盎然地施展绝活。今天,就让我们一同探索Qt5中的日历组件、登录窗口、文件对话框、颜色选择对话框、进度条和Timer组件,见识它们的强大之处!一、......
  • B2102 计算鞍点
    B2102计算鞍点计算鞍点题目描述给定一个\(5\times5\)的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中,第\(4\)行第\(1\)列的元素就是鞍点,值为\(8\)。113......
  • QT5.14.2 探秘Qt信号槽奥秘--让对象间通信如虎添翼
    一、前言在当今这个万物互联的时代,对象间通信无疑是编程领域中最为基础也最为重要的问题。作为知名的跨平台开发框架,Qt自然也需要解决这一问题。于是,Qt巧妙地提出了信号与槽(Signals&Slots)这一机制,以观察者模式的思路让对象间通信变得行云流水。那么,Qt信号与槽的本质......
  • unity+c#小项目练习 左右移动和碰撞
    创建首先,我们在Hierarchy面板创建两个cube,将其命名为player和player1,将player1的Scale均改为10,两者都要挂载上Rigidbody哦,切记!!!两者相撞还是会飞出去,是因为什么呢?因为两者质量是1,将player1的质量调成10,会被player推动,但是不会撞飞。懂了吧,质量!!!ok,我们来看看代码,这个是在scri......