[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

相关文章

2024年六月英语四级真题及解析PDF共9页

2024年六月英语四级真题及解析PDF共9页,真题就是最好的复习资料,希望对大家有所帮助。

2024年6月第2套英语四级真题PDF

2024年6月第2套英语四级真题PDF

(素材源码)猫猫学iOS(四十六)之网易彩票幸运大转盘

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 素材源码地址:http://download.csdn.net/detail/u013357243/8713827 效果 代码: NYWheel NYWheel.h //// NYWheel.h//

猫猫学iOS(四十六)之网易彩票幸运大转盘

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 素材源码地址:http://blog.csdn.net/u013357243/article/details/45828841 效果 实现过程: 基础UI搭建 这里主要是用了xib搭建,首先我们分析,有中间的开

cf 259 b幻方

B. Little Elephant and Magic Square time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Little Elephant loves magic squares very much

河南省第三届职业技能大赛 网络安全(世赛选拔)项目样题

河南省第三届职业技能大赛 网络安全(世赛选拔)项目样题 A模块基础设施设置/安全加固(200分)A-1任务一 登录安全加固A-2任务二 Web安全加固(Web)A-3任务三 流量完整性保护与事件监控(Web,Log)A-4任务四 防火墙策略A-5:登录安全加固(Windows, Linux)A-6:本地安全策略设置(Windows)A-7:流量完整性保护(Windows, Linux)A-8

[GESP202312 四级] 田忌赛马

题目描述 如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如 1313。给定两个正整数 A,BA,B,请求出大于等于 AA、小于等于 BB 的所有绝对素数。 输入格式 输入 11 行,包含两个正整数 AA 和 BB。保证 10<A<B<10010<A<B<100。 输出格式 若干行,每行一个绝对素数,从小到大输出。 输入输出样例 输入 #1复制 11 20

【2024 CCF编程能力等级认证(GESP)C++ 】一级大纲

目录 1. 背景2. 考核知识块3. 考核内容3.1 计算机基础知识3.2 集成开发环境3.3 结构化程序设计3.4 程序的基本语句3.5 程序的基本概念3.6 基本运算3.7 基本数据类型4. 考核目标5. 题型分布6. 考试时长7. 认证时间与报名8. 政策与福利9. GESP一级认证形式 1. 背景 官网:CCF编程能力等级认证(GESP)为青少年计算机和编程学习者提供学

SAT改革:SAT官方最新样题解读与备考建议

College Board于2015年1月9日释放新SAT考试最新样题,小编第一时间为各位考生及家长进行新SAT考试的样题解析及备考规划建议,此次小编给出了SAT语法样题一、样题二,阅读第一、二篇,数学,写作样题与范文的详细解读,希望各位考生在2015冲刺高分成绩! 新SAT科目官方样题答案解析新SAT语法新SAT写作与语法能力真题及答案样题1解析 | 样题2解析 | 新SAT语法备考建议新

幸运数 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。

package org.bluebridge.topics;/** 幸运数幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。首先从1开始写出自然数1,2,3,4,5,6,.... 1 就是第一个幸运数。 我们从2这个数开始。把所有序号能被2整除的项删除,变为:1 _ 3 _ 5 _ 7 _ 9 ....把它们缩紧,重新记序,为: 1 3 5 7 9 .... 。这时,3为第2个幸