您的位置:首页 > 财经 > 产业 > 健康陕西app管理端_免费b2b网站推广列表_做seo如何赚钱_关键词优化的发展趋势

健康陕西app管理端_免费b2b网站推广列表_做seo如何赚钱_关键词优化的发展趋势

2025/1/22 16:09:16 来源:https://blog.csdn.net/xiaoxi_hahaha/article/details/143802163  浏览:    关键词:健康陕西app管理端_免费b2b网站推广列表_做seo如何赚钱_关键词优化的发展趋势
健康陕西app管理端_免费b2b网站推广列表_做seo如何赚钱_关键词优化的发展趋势

1、盲听C哈说

        今天继续带大家刷一刷关于二维数组知识点的题目,二维数组这一块内容确实会难倒很多小朋友,在使用二维数组的时候,一定是先对循环嵌套要有一个较深的理解,否则在二维数组行和列的处理上就会显得有些笨拙(查缺补漏,不会什么就补什么!)。

2、问题描述

(1)题目描述

        有数列:1,2,3,2,3,4,3,4,5,4,5,6,5,……。现在需要按照这个规律生成一个二维的数列,以如下表格为例:

1232343454
2323434545
3234345456
2343454565
3434545656
4345456567
3454565676
4545656767
5456567678
4565676787

        输入一个正整数n和m,(n,m  <=  20),输出按上述规律生成的二维数组中 第n行、第m列上的整数(行号和列号均从1开始计起

(2)输入描述

        输入占一行,为两个正整数n和m。

(3)输出描述

        输出占一行,为第n行、第m列上的整数。

(4)样例输入1

        3        7

(5)样例输出1

        5

(6)样例输入1

        10        10

(7)样例输出1

        7

3、问题分析

        这道题还是需要大家找规律的,看起来题目不长,但是能做出来的小朋友寥寥无几,其实做题有三大步骤,第一:阅读题目,搞清楚题目要求什么(考察语文阅读能力),第二:找到数学解题方法(数学思维逻辑能力),第三:写代码(代码编程能力),这三个缺一不可,任何一道题肯定是经历了这三个步骤的,没有谁一上来就开始写代码,除非这道题你曾经背诵过代码,但那样做似乎没有必要。 

        在这里约定第0行第0列不用【根据个人编码习惯,决定是否使用】,观察一下,发现每一行行首的数字和第一行的数字是对应的,我们先来观察第一行数字:1 2 3 2 3 4 3 4 5 4 5 6 ……,我们可以对其进行分组,第1组:1 2 3、第2组:2 3 4、第3组:3 4 5、第4组:4 5 6…… ,每一组开头的第一个数,都表明当前是第几个组,每一组有3个数字,假设s代表第几组,t代表每组中的第一个数(t的取值范围是1~3,要么当前是第1个数、要么是第2个数、要么是第3个数),进一步地,如果要求解每行的行首数据,那么需要知道当前所在行所代表的数字在第一行中是第几组第几列,例如要求解第5行的行首数据,它是第一行数据中的第2组的第2个数字,表示为公式就是在第5/3+1组,第5%3列,于是可以求出行首数据为:(5/3+1)+(5%3)-1等于3,因此第5行行首数据为3。因此,可以得出一个结论,第i行行首的数字为s+t-1(s代表是第几组,t代表是组内的第几个数字),有了每一行的起始数据之后,就可以根据数列的规律生成这一行所有的数据了。

        本题的解题思路为:当算出每一行的行首数字之后(假设是第s组的第t个数),那么就可以计算当前行上的其它数据,因此需要两重循环,外重循环代表行,内层循环代表列,t在计数的时候,每次递增1,当t>3,那么就需要重新从t=1开始递增,且第s组,要变为第s+1组,即s=s+1,然后根据s和t的值,我们能够计算每个位置上的数字是s+t-1,因为本题数据量比较少,最多20行20列,因此我们可以一口气将其全部计算出来,最后输入m和n的值,输出a[m][n]即可,a是一个二维数组,里面存储了所有计算出来的数据。

        唉,反正不知道你能不能听懂我在说什么,如果你还是不太理解,你找我拿视频吧,我有做关于这道题的图画+视频的详细解释。

4、代码实现

#include<bits/stdc++.h>
using namespace std;int main()
{int n,m,s,t;int a[25][25]={0};for(int i=1;i<=20;i++){// if-else 用来判断当前行的第一列数据// 在第一行的第几组,第几个,通过第s组和第t个// 就可以计算出当前行的行首数据,即s+t-1 if(i%3==0)s=i/3,t=3;else s=i/3+1,t=i%3;// 计算第i行的行首数字,由这个数据出发,规律填数 a[i][1] = s+t-1;// 从第2列开始填数,填到第20列 for(int j=2;j<=20;j++){t++;if(t>3)s++,t=1;a[i][j] = s+t-1;}}cin >> n >> m;cout << a[n][m];return 0;
} 

5、OJ测试

大家写完代码之后如果想要做OJ测试,可以找我要相关链接,电脑自动评测会更加准确~,好了,今天这篇文章就讲到这里,我们下期再见~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com