[GESP样题 四级] 填幻方和幸运数

B3940 [GESP样题 四级] 填幻方

题目

在一个N×N 的正方形网格中,每个格子分别填上从 1 到 N×N 的正整数,使得正方形中任一行、任一列及对角线的几个数之和都相等,则这种正方形图案就称为“幻方”(输出样例中展示了一个3×3 的幻方)。我国古代称为“河图”、“洛书”,又叫“纵横图”。幻方看似神奇,但当 N 为奇数时有很方便的填法:

  1. 一开始正方形中没有填任何数字。首先,在第一行的正中央填上 1。
  2. 从上次填数字的位置向上移动一格,如果已经在第一行,则移到同一列的最后一行;再向右移动一格,如果已经在最右一列,则移动至同一行的第一列。如果移动后的位置没有填数字,则把上次填写的数字的下一个数字填到这个位置。
  3. 如果第 2 步填写失败,则从上次填数字的位置向下移动一格,如果已经在最下一行,则移到同一列的第一行。这个位置一定是空的(这可太神奇了!)。把上次填写的数字的下一个数字填到这个位置。
  4. 重复 2、3 步骤,直到所有格子都被填满,幻方就完成了!

快来编写一个程序,按上述规则,制作一个N×N 的幻方吧。

输入为一个正奇数 N,保证 3≤N≤21。

输出 N 行,每行 N个空格分隔的正整数,内容为N×N 的幻方。

运行代码
#include <iostream>  
#include <vector>  
using namespace std;    
void FN(int N) {  vector<vector<int>> FF(N, vector<int>(N, 0));  int num = 1;  int r = 0, c = N / 2;  while (num <= N * N) {  // 将数字填入当前位置  FF[r][c] = num++;  // 计算下一个位置  int R= (r - 1 + N) % N;  int C = (c + 1) % N;  // 检查下一个位置是否已被占用  if (FF[R][C] != 0) {  r = (r+ 1) % N;  } else {  r = R;  c = C;  }  }  // 打印幻方  for (int i = 0; i < N; ++i) {  for (int j = 0; j < N; ++j) {  cout << FF[i][j] << (j < N - 1 ? " " : "\n");  }  }  
}  
int main() {  int N;  cin >> N;  if (N % 2 == 0 || N < 3 || N > 21) {  return 1;  }  FN(N);  return 0;  
}
思路
  • 初始化一个N x N的二维向量vector<vector<int>> FF(N, vector<int>(N, 0));,用来存储幻方数据,初始值全为0。设置计数器num = 1,用于填充数字。
  • 定义两个变量rc来追踪当前填充的位置,初始位置设在中心(r = 0, c = N / 2)
  • 使用while循环,直到所有数字填充完毕(num <= N * N)。
  • 在当前位置(r, c)放入数字num,然后递增num
  • 计算下一个位置的行R和列C,使用取模运算保证位置在矩阵范围内。
  • 如果下一个位置已占用,则向下一行移动;否则,更新当前位置为计算出的下一个位置。

B3850 [GESP202306 四级] 幸运数

题目

小明发明了一种 "幸运数"。一个正整数,其偶数位不变(个位为第 1 位,十位为第 2 位,以此类推),奇数位做如下变换:将数字乘以 7,如果不大于 9 则作为变换结果,否则把结果的各位数相加,如果结果不大于 9 则作为变换结果,否则(结果仍大于 9)继续把各位数相加,直到结果不大于 9,作为变换结果。变换结束后,把变换结果的各位数相加,如果得到的和是 8 的倍数,则称一开始的正整数为幸运数。

例如,16347:第 1位为 7,乘以 7 结果为 49,大于 9,各位数相加为13,仍大于9,继续各位数相加,最后结果为4;第3 位为3,变换结果为3;第 55 位为 1,变换结果为 7。最后变化结果为 76344,对于结果76344 其各位数之和为24,是 8的倍数。因此 16347 是幸运数。

输入第一行为正整数 N,表示有 N个待判断的正整数。约定 1≤N≤20。从第 2 行开始的 N 行,每行一个正整数,为待判断的正整数。约定这些正整数小于 10^12。

输出 N行,对应 N 个正整数是否为幸运数,如是则输出 'T',否则输出 'F'。

提示:不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。

运行代码
#include <iostream>  
#include <string>  
#include <algorithm>  
using namespace std; 
int FN(long long num) {  int sum = 0;  while (num > 0) {  sum += num % 10;  num /= 10;  }  return sum;  
}  
// 函数:对奇数位进行变换  
string FF(const string& numStr) {  string result;  for (size_t i = 0; i < numStr.size(); ++i) {  if (i % 2 == 0) { // 偶数位直接添加  result += numStr[i];  } else { // 奇数位进行变换  int digit = numStr[i] - '0';  int t = digit * 7;  while (t> 9) {  t= FN(t);  }  result +=to_string(t);  }  }  return result;  
}  
// 函数:判断是否为幸运数  
bool Number(const string& numStr) {  string t = FF(numStr);  return FN(stoll(t)) % 8 == 0;  
}  
int main() {  int N;  cin >> N;  cin.ignore(); // 忽略可能存在的换行符  while (N--) {  string numStr;  getline(cin, numStr); // 读取一行字符串作为数字  if (Number(numStr)) {  cout << "T" << endl;  } else {  cout << "F" << endl;  }  }  return 0;  
}
思路
  • 计算一个数的各位数之和。
  • FN:对输入的数字字符串的奇数位进行变换,并返回变换后的字符串。
  • Number:判断一个数字字符串是否为幸运数。

main函数中,我们读取要判断的正整数个数N,然后对每个正整数进行判断并输出结果。注意我们使用getline来读取每行的输入,以正确处理可能包含前导零的情况。此外,我们使用stoll将变换后的字符串转换回long long类型,以计算其各位数之和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICode国际青少年编程竞赛- Python-4级训练场-嵌套for循环练习

ICode国际青少年编程竞赛- Python-4级训练场-嵌套for循环练习 1、 for i in range(3):Spaceship.step(4)for j in range(4):Dev.step(2)Dev.turnRight()Spaceship.turnLeft()Spaceship.step(4)Spaceship.turnRight()2、 for i in range(4):Spaceship.step(6)for j in range(3):…

Nginx或Tengine服务器配置SSL证书

目录 前提条件 步骤一&#xff1a;下载SSL证书 步骤二&#xff1a;在Nginx服务器安装证书 步骤三&#xff1a;验证SSL证书是否配置成功 前提条件 已通过数字证书管理服务控制台签发证书SSL证书绑定的域名已完成DNS解析&#xff0c;即您的域名与主机IP地址相互映射已在Web服…

Lazada、Shopee测评自养号,快速出单技巧全解析!

每个人都憧憬着自己的店铺能够拥有一款或多款引人注目的热销商品&#xff0c;这些商品不仅能为店铺带来可观的收益&#xff0c;更重要的是它们能够成为吸引顾客的强大磁石&#xff0c;显著提升店铺的整体流量。一旦这样的爆款商品成功吸引顾客&#xff0c;其他产品也将随之受到…

C++11:并发新纪元 —— 深入理解异步编程的力量(1)

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《C11&#xff1a;并发新纪元 —— 深入理解异步编程的力量》&#xff0c;在这篇文章中&#xff0c;你将会学习到C新特性以及异步编程的好处&#xff0c;以及其如何带来的高性能的魅力&…

Python:通过接口获取公众号的文章列表(但是开发文档没有这个接口)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

力扣HOT100 - 35. 搜索插入位置

解题思路&#xff1a; 二分法模板 class Solution {public int searchInsert(int[] nums, int target) {int left 0;int right nums.length - 1;while (left < right) {int mid left ((right - left) >> 1);if (nums[mid] target)return mid;else if (nums[mid…

【qt】设计器实现界面

设计器实现界面 一.总体思路二.具体操作1.创建项目2.粗略拖放3.水平布局4.垂直布局5.修改名字6.转到槽7.实现槽函数 一.总体思路 二.具体操作 1.创建项目 这次咱们一定要勾选Generate form哦。 因为我们要使用设计器进行拖放。 2.粗略拖放 这里用到了复选框&#xff1a;C…

[数据集][目标检测]管道焊缝质量检测数据集VOC+YOLO格式1134张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1134 标注数量(xml文件个数)&#xff1a;1134 标注数量(txt文件个数)&#xff1a;1134 标注…

“我们坚持开源!”阿里云发布“地表最强”中文大模型:半年一迭代、性能翻倍?

5 月 9 日&#xff0c;在通义大模型发布一周年之际&#xff0c;阿里云大模型生态迎来一次重大升级&#xff0c;主要有“四个最”&#xff1a; 通义千问 2.5 正式发布&#xff0c;“模型性能全面赶超 GPT-4 Turbo&#xff0c;成为地表最强中文大模型”&#xff1b;Qwen1.5-110B…

卷积特征图与感受野

特征图尺寸和感受野是卷积神经网络中非常重要的两个概念&#xff0c;今天来看一下&#xff0c;如何计算特征尺寸和感受野。 特征图尺寸 卷积特征图&#xff0c;是图片经过卷积核处理之后的尺寸。计算输出特征的尺寸&#xff0c;需要给出卷积核的相关参数包括&#xff1a; 输…

PC端与bluetooth蓝牙虚拟串口通信

应该采用RFCOMM虚拟串口方式来进行通信&#xff0c;原理跟socket通信类似&#xff0c;不同的是使用的通信协议不同&#xff0c;本人结合相关的API&#xff0c;做了以下最简单的封装。 1、获取本地蓝牙设备与附近蓝牙设备信息 2、通信类 /* 通信类&#xff1a;只是对于客户端通…

抽空学学go

2024年5月9日11:14:24 学习go 看课8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili 文档[8小时转职Golang工程师 (yuque.com)]( 1.安装go 2024年5月9日11:27:16 2.安装 vscode go配置环境 vs code配置go开发环境 (zhihu.com) vscode里面配置代理&…

全志ARM-SG90舵机

控制转角 向黄色信号线“灌入”PWM信号。 PWM波的频率不能太高&#xff0c;50hz&#xff0c;即周期1/频率1/500.02s&#xff0c;20ms左右数据&#xff1a; 不同的PWM波形对应不同的旋转角度&#xff0c;以20ms为周期&#xff0c;50hz为频率的PWM波 定时器需要定时20ms,关心的单…

vue阶段案例,练习filter、map、forEach,双向绑定,三元表达式,以及图片滚动,文字跳动等等。

阶段案例 通过案例来练习双向绑定&#xff0c;三元表达式&#xff0c;以及图片滚动&#xff0c;文字跳动等等。 代码如下&#xff1a; <template><table class"bjtp" ><div class"title" >{{title}}</div><div class"s…

【解决Android Studio】cmake报错找不到vulkan包

1 报错信息 CMake Error at D:/Android/project/cmake/3.10.2.4988404/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Vulkan (missing: Vulkan_LIBRARY) Call Stack (most recent call first): 2. 错误原因 minSdk版本不对&am…

18.Blender 渲染工程、打光方法及HDR贴图导入

HDR环境 如何导入Blender的HDR环境图 找到材质球信息 在右上角&#xff0c;点击箭头&#xff0c;展开详细部分 点击材质球&#xff0c;会出现下面一列材质球&#xff0c;将鼠标拖到第二个材质球&#xff0c;会显示信息 courtyard.exr 右上角打开已渲染模式 左边这里选择世界…

动作识别 slowfast动作识别项目记录

动作识别 slowfast动作识别项目记录

如何在自己的服务器上快速搭建第一个网站(其一)

根据上篇文章相信很多人以及成功搭建服务器啦。今天我们讲下如何在自己的服务器快速搭建第一个网站的一些重要配置&#xff0c;以及搭建网站的必备环境。干货满满&#xff0c;希望大家能够关注点赞收藏。 我会不定期更新一些实用的工具&#xff0c;欢迎大家私信评论喔&#xf…

12个网上赚钱野路子信息差,人人可做的赚钱小项目!

在这个多元化的时代&#xff0c;副业已经成为许多人增加收入、实现自我价值的重要途径。今天&#xff0c;我们就来聊聊那些既有趣又能赚钱的副业项目&#xff0c;让你的钱包鼓起来&#xff01; 1.文字创作 写作不仅是情感的宣泄&#xff0c;更是财富的积累。无论是自媒体文、软…

事件代理 浅谈

事件代理是一种将事件处理委托给父元素或祖先元素来管理的技术。当子元素触发特定事件时&#xff0c;该事件不会直接在子元素上进行处理&#xff0c;而是会冒泡到父元素或祖先元素&#xff0c;并在那里进行处理。这样做的好处是可以减少事件处理函数的数量&#xff0c;提高性能…