环形处理习题,举例:约瑟夫环,魔方阵

news2024/11/17 20:17:24

目录

约瑟夫环

魔方阵


约瑟夫环

题目描述:有n 个人围成一圈,顺序排号。从第1个人开始报数从1到3报数凡是报到3 的人退出圈子,问最后留下的是原来的第几号?

环形处理:依次遍历数据集的每个元素(每个人依次报号),直到遍历到最后一个元素时,便开始对数据集进行新一轮的遍历(最后一个人报完号后,再次轮到第一个人报号)。

处理方法1:i=(i+1)%n

int joseph(int n)
{
	int* arr = (int*)malloc(n * sizeof(int));//标志数组
	assert(arr != NULL);
	if (arr == NULL)
		return -1;//出错
	int i;
	for (i = 0; i < n; i++) {
		arr[i] = 1;//1还在游戏,0退出游戏
	}
	int count = n;//还在参与游戏的人数
	int tmp = 0;//报数器
	i = 0;
	while (count > 1) {
		if (arr[i] == 1)//报数
		{
			tmp++;
			if (tmp == 3)//退出
			{
				arr[i] = 0;
				count--;
				tmp = 0;
			}
		}
		//i++//线性,错误,必须环形处理
		i = (i + 1) % n;//环形
	}
	//找还在参与的人数
	for (i = 0; i < n; i++) {
		if (arr[i] == 1)
			break;
	}
	free(arr);
	return i + 1;
}

处理方法2:

  • if-else语句判断
  • 三目运算符i  = (i == n - 1) ? 0 : i + 1;
int joseph(int n)
{
	int* arr = (int*)malloc(n * sizeof(int));//标志数组
	assert(arr != NULL);
	if (arr == NULL)
		return -1;//出错
	int i;
	for (i = 0; i < n; i++) {
		arr[i] = 1;//1还在游戏,0退出游戏
	}
	int count = n;//还在参与游戏的人数
	int tmp = 0;//报数器
	i = 0;
	while (count > 1) {
		if (arr[i] == 1)//报数
		{
			tmp++;
			if (tmp == 3)//退出
			{
				arr[i] = 0;
				count--;
				tmp = 0;
			}
		}
		//if (i == n - 1)
		//	i = 0;
		//else
		//	++i;

		i = (i == n - 1) ? 0 : i + 1;
	}
	//找还在参与的人数
	for (i = 0; i < n; i++) {
		if (arr[i] == 1)
			break;
	}
	free(arr);
	return i + 1;
}

魔方阵

输出奇数阶“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。

例如,三阶魔方阵为:

奇数魔方阵的特点:

1.数字1放在第一行中间;

2下一个值放在前一个值的"上一行,后一列"(例如数字2,数字3);

3如果下一个位置已经有数据了,则放在前一个值的”下一行,同列”(例如数字4).

int** Cube(int n)
{
    if (n % 2 != 1)
        return NULL;
    int** p = (int**)malloc(n * sizeof(int*));
    assert(p != NULL);
    for (int i = 0; i < n; i++)
    {
        p[i] = (int*)calloc(n,sizeof(int));
        assert(p[i] != NULL);
    }
    int i = 0;
    int j = n / 2;
    p[i][j] = 1;
    int tmp = 2;
    while (tmp <=n*n)
    {
        if (p[(i + n - 1) % n][(j + 1) % n] == 0)
        {
            p[(i + n - 1) % n][(j + 1) % n] = tmp;
            i = (i + n - 1) % n;
            j = (j + 1) % n;
        }
        else
        {
            p[(i + 1) % n][j] = tmp;
            i = (i + 1) % n;
        }
        tmp++;
    }
    return p;
}

int main() {
    int** arr = Cube(3);
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

总结:

环形处理向后移动:i=(i+1)%n

环形处理向前移动:i=(i-1+n)%n

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

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

相关文章

【Linux】编译Linux内核

之所以编译内核&#xff0c;是因为gem5全系统仿真需要vmlinux文件&#xff0c;在此记录一下以备后面需要。 此过程编译之后会获得vmlinux和bzImage两个文件&#xff1b; 主要参考知行大佬的编译内核与gem5官方教程 文章目录 一、Linux源码下载二、安装编译依赖三、编译1. 内核编…

5种常用Web安全扫描工具,快来查漏补缺吧!

漏洞扫描是一种安全检测行为&#xff0c;更是一类重要的网络安全技术&#xff0c;它能够有效提高网络的安全性&#xff0c;而且漏洞扫描属于主动的防范措施&#xff0c;可以很好地避免黑客攻击行为&#xff0c;做到防患于未然。那么好用的漏洞扫描工具有哪些&#xff1f; 答案…

抖音小程序开发实战:打造独特品牌体验的代码之旅

抖音小程序的崛起为品牌提供了一个全新的数字化平台&#xff0c;而通过深入的抖音小程序开发&#xff0c;品牌不仅能够提升曝光度&#xff0c;更能打造独特的用户体验。在本文中&#xff0c;我们将深入研究抖音小程序开发的关键技术要点&#xff0c;并通过实际代码演示&#xf…

互联网医院牌照|互联网医院牌照办理合法经营医疗服务

在当今数字化医疗的快速发展中&#xff0c;互联网医院牌照不仅是对公司医疗业务的认可&#xff0c;也是开启线上医疗服务的关键。我们的服务旨在帮助您快速、顺利地获得互联网医院牌照&#xff0c;以便您可以及时开展线上医疗服务。 互联网医院牌照申请流程&#xff1a; 1、首…

栈 和 队列

什么是栈? 一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出&#xff08;LIFO - Last In First Out&#xff09;的原则。   从数据结构的角度来看&…

六度空间(C++)

目录 题目&#xff1a; 输入、输出格式&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 题目&#xff1a; 输入、输出格式&#xff1a; 代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; int g[10005][10005]; float n…

Nussbaumer Transform 以及 Amortized FHEW bootstrapping

参考文献&#xff1a; [Nuss80] Nussbaumer H. Fast polynomial transform methods for multidimensional DFTs[C]//ICASSP’80. IEEE International Conference on Acoustics, Speech, and Signal Processing. IEEE, 1980, 5: 235-237.[SV11] Smart N P, Vercauteren F. Full…

95. 费解的开关

题目 思路 因为最优解是每个灯只操作一次所以顺序无所谓只要确定了第一行后&#xff0c;下面都可以确定当前灯不亮就操作它下面的格子即可点亮它我觉得这种方法是唯一不会互相干扰的方法还是不太理解… 代码 #include <cstdio> #include <cmath> #include <c…

Linux C/C++ 入侵检测系统(IDS绕过技巧)

入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;其主要功能是对网络传输进行即时监视&#xff0c;并在入侵检测系统&#xff08;IDS&#xff09;是一种网络安全设备&#xff0c;其主要功能是对网络传输进行即时监视&#xff0c;并在发现可疑传输时发出…

【tgowt】更新thirdparty

更新完毕后是这样的 之前有过构建但是不能用在owt-p2p项目中,会有崩溃? 【tgowt】cmake转ninja vs构建现在好像都更新到108了 submodule比较麻烦 只修改这里的还不行:一旦git submodule init 后,再改这里的似乎晚了?如果能成功clone就有生成 还必须要改这里的 折腾好几次才…

NL2SQL学习

在学习NL2SQL之前先要进行三W提问&#xff1a; 即what 是什么 &#xff1b; why 为什么使用&#xff1b; how 如何使用 NL2SQL是什么&#xff1f; NL2SQL&#xff08;NLP Natural Language To SQL&#xff09;是自然语言处理的新兴研究热点&#xff0c;顾名思义&#xff0…

【STM32】

STM32 1 CMSIS1.1 概述1.2 CMSIS 应用程序文件描述 2 库2.1 简介2.2 标准外设库&#xff08;standrd Peripheral Libraries&#xff09;2.3 HAL 库2.3.1 目录结构2.3.2 HAL库API函数和变量的命名规则2.3.3 HAL库对寄存器位操作的相关宏定义2.3.4 HAL库回调函数2.3.5 HAL使用注意…

drawio连接线的样式设置

drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#xff0c;以及在线共…

给CAD中添加自定义菜单CUIX

本文以AutoCAD2020为例&#xff0c;介绍如何添加自定义菜单。 打开AutoCAD2020&#xff0c;在命令行执行CUI并回车&#xff0c;出现菜单 进入菜单编辑界面 点击传输&#xff0c;然后新建 在菜单上右键&#xff0c;添加自定义菜单 点击保存&#xff0c;即可存为cuix文件。之后…

湖南大学-数据库系统-2018期中考试解析

答案是自己做的&#xff0c;仅供参考。 一、单选题&#xff08;每小题2分&#xff0c;共30分&#xff09; 1、下列关于数据库系统正确的描述是&#xff08; A &#xff09;。 A、数据库系统减少了数据的冗余 B、数据库系统避免了一切冗余 C、数据库系统中数据的一致性是指数据…

leetCode 493 翻转对

给定一个数组 nums &#xff0c;如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。 未完待续~

“辛巴猫舍”内网渗透、提权、撞库学习笔记

前言&#xff1a; 在拿到靶机时&#xff0c;我们最先需要做的是信息收集&#xff0c;包括不限于&#xff1a;C段扫描&#xff0c;端口探测&#xff0c;指纹识别&#xff0c;版本探测等。其次就是 漏洞挖掘、漏洞利用、提权、维持权限、日志清理、留下后门。 以上就是渗透的基本…

企业微信开发教程一:添加企微应用流程图解以及常见问题图文说明

最近在前辈的基础上新添加了一个企微应用&#xff0c;过程中遇到了一些卡点&#xff0c;这里一一通过图片标注与注释的方式记录一下&#xff0c;希望能给后来人提供一些清晰明了的帮助&#xff0c;话不多说&#xff0c;大家直接看图吧。 &#xff08;文中包括一些本项目独有的配…

SPSS二元Logistic回归

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

畅通工程之局部最小花费问题 (C++)

目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 结果 题目&#xff1a; 思路&#xff1a; 详细思路都在代码注释里 。 代码&#xff1a; #include<iostream>//无向图邻接矩阵 #include<map> #include<algorithm> #define mvnum 1005 using …