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

2024-05-12 00:52
文章标签 gesp 样题 幸运 四级 幻方

本文主要是介绍[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类型,以计算其各位数之和。

这篇关于[GESP样题 四级] 填幻方和幸运数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981148

相关文章

用Python制作幸运大转盘,抽奖转盘对比-tkinter(Python的内置GUI库)和pygame(一个更强大的游戏和多媒体应用库)——小白也能轻松看懂

一、要制作一个幸运大转盘(抽奖转盘)的Python程序,你可以使用图形库如tkinter(Python的内置GUI库)或者pygame(一个更强大的游戏和多媒体应用库)。由于tkinter更为简单和直接,以下是一个基本的tkinter实现的例子: import tkinter as tk from tkinter import Canvas, Button, Tk import rand

幸运小猫爱心平台设计文档

这是一个关于Java高级程序设计实训的题目,名为“幸运小猫爱心平台”。该平台的目标是规范校园内的流浪猫管理,并允许用户查阅、搜索、发布或领养宠物。下面将提供一个简单的系统设计文档,以帮助您更好地理解如何实现这个项目。 幸运小猫爱心平台设计文档 1. 引言 本设计文档旨在为“幸运小猫爱心平台”的开发提供详细的指导方案。系统旨在提供一个全面的流浪猫管理平台,支持用户注册、登录、浏览、搜索、发布和

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA 的幸运游戏(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~ 🍓OJ题目截图 文章目录 📎在线评测链接🍓OJ题目截图🫔 LYA 的幸运游戏问

LeetCode contest 182 5368. 找出数组中的幸运数

Table of Contents 一、中文版 二、英文版 三、My answer 四、解题报告 一、中文版 在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。 给你一个整数数组 arr,请你从中找出并返回一个幸运数。 如果数组中存在多个幸运数,只需返回 最大 的那个。如果数组中不含幸运数,则返回 -1 。   示例 1: 输入:arr

2024-03 GESP C++ 六级试题及答案

2024-03 GESP C++ 六级试题及答案1 单选题(每题 2 分,共 30 分)第 1 题 在构建哈夫曼树时,每次应该选择( )合并。 A. 最小权值的节点 B. 最大权值的节点 C. 随机节点 D. 深度最深的节点 第 2 题 面向对象的编程思想主要包括以下哪些原则( )? A. 贪心、动态规划、回溯 B. 并发、并行、异步 C. 递归、循环、分治 D. 封装、继承、多态 第 3 题

GESP三级 - 第二章 - 第2节 - string字符串的应用

1. 认识字符串 1.1 什么是字符串 字符串是由一系列字符组成的序列,如"Hello, world!","abcd123"等。在C++中,字符串是用string类型表示的。 #include <iostream>#include <string>using namespace std;int main() {// 定义并初始化两个字符串string str1 = "Hello, wor

docker 部署nginx多级子域名(三级四级...)映射不同web项目,访问不同路径地址

一、背景 只有一台服务器,一个顶级域名,现在需要根据不同子域名访问不同web项目,比如 # 管理后台cms.biacu.com# 客户端h5h5.biacu.com# 四级域名h5.s.biacu.com 同时,不同web项目放在不同位置 二、 1、在云服务器上,添加解析,如下图 2、nginx.conf的配置如下 user nginx;worker_processe

GESP一级 - 第二章 - 第1节 - 变量的定义与使用(3)

输出第一个天秀整数 题目描述 作为一个天秀的程序员,你需要展示自己超强的编程能力。现在给你一个挑战:输入三个整数,每个整数都是天秀级别的,即32位有符号整数。你的任务是从这三个整数中找到最天秀的那个,并将其输出。怎么样,是不是很简单?对于你这样的天秀程序员来说,这只是一个小菜一碟啦! 输入格式 输入只有一行,包含三个天秀级别的32位有符号整数,整数之间由一个空格分隔。 输出格式 输出也

省市区镇(可以选四级)联动点击自动展开下一级

周末在家的时候,接到后端的一个电话,说领导有这个这样的需求。刚开始我理解错了。以为需要做一个省市区三级联动的,稀里哗啦的在网上找了数据。然后谢了出来。结果沟通才知道。需求理解错了,需要电商网站填写个人收货地址的需求。简化用户点击次数,选择完省,市自动出来,选择市,县自动出来,接着再如果需要四级联动,就单独封装函数AJAX四级城镇请求出来: 代码为: <!doctype html><htm

B3958 [GESP202403 四级] 相似字符串

[GESP202403 四级] 相似字符串 题目描述 对于两个字符串 A A A 和 B B B,如果 A A A 可以通过删除一个字符,或插入一个字符,或修改一个字符变成 B B B,那么我们说 A A A 和 B B B 是相似的。 比如 apple \texttt{apple} apple 可以通过插入一个字符变成 applee \texttt{applee} appl