zoj 1088 System Overload

  约瑟夫环 (josephus problem )问题,有公式 可以直接套用

  我使用暴力破解方法求解(用时3秒多)。

   代码如下:

/* zoj 1088 System Overload */
#include <stdio.h>
#include <string.h>#define MAXBUILDING 150int minStepNum(int totalBuilding, int lastNum);int main(void)
{int n;/* int minStepTab[MAXBUILDING];int i;for(i = 3; i < MAXBUILDING; i++)minStepTab[i] = minStepNum(i,2);*/while(scanf("%d", &n) == 1 && n != 0)/*   printf("%d\n", minStepTab[n]);*/printf("%d\n",minStepNum(n,2));return 0;}
int minStepNum(int totalBuilding, int lastNum)
{int minStep = 2;int count,i,flag;int isCutOff[MAXBUILDING];int buildings[MAXBUILDING];for(i = 0; i < totalBuilding; i++)buildings[i] = i+1;while(1){memset(isCutOff,0,sizeof(isCutOff));isCutOff[0] = 1;flag = 0;for(i = count = 0; count < minStep * (totalBuilding-2);i = (i+1)%totalBuilding)if(isCutOff[i] == 0){count++;if(count % minStep == 0 && buildings[i] == lastNum){flag = 1;break;}else if(count % minStep == 0)isCutOff[i] = 1;}if(count == minStep*(totalBuilding-2) && !flag)for(i = 0; i < totalBuilding; i++)if(isCutOff[i] == 0)return minStep;minStep++;}return 0;
}

 直接套用公式的代码(15ms):

#include <stdio.h>int Josephus(int n, int m)
{if(n == 1)return 0;elsereturn (Josephus(n-1,m)+m)%n;
}
int main(void)
{int n;int i;while(scanf("%d", &n) == 1 && n != 0){for(i = 2;; i++)if(Josephus(n-1,i) == 0){printf("%d\n",i);break;}}return 0;
}
 

起初我使用最原始的暴力破解法(未使用任何优化),结果超时了(可能需要15秒左右,超出了规定的10秒限制)

 产生超时结果对应代码:

/* zoj 1088 System Overload */
#include <stdio.h>
#include <string.h>#define MAXBUILDING 150int lastNumber(int totalBuilding, int stepNum);
int minStepNum(int totalBuilding, int lastNum);int main(void)
{int n;int minStepTab[MAXBUILDING];int i;for(i = 3; i < MAXBUILDING; i++)minStepTab[i] = minStepNum(i,2);while(scanf("%d", &n) == 1 && n != 0)printf("%d\n", minStepTab[n]);/*    printf("%d\n",minStepNum(n,2));*/return 0;
}
int minStepNum(int totalBuilding, int lastNum)
{int i;for(i = 2; lastNumber(totalBuilding,i) != lastNum; i++) ;return i;
}
int lastNumber(int totalBuilding, int stepNum)
{int building[MAXBUILDING],isCutOff[MAXBUILDING];int i,count;memset(isCutOff,0,sizeof(isCutOff));for(i = 0; i < totalBuilding; i++)building[i] = i+1;isCutOff[i=0] = 1;/*  count = 0;*/for(count = 0;count < stepNum * (totalBuilding-2); i = (i+1)%totalBuilding)if(isCutOff[i] == 0){count++;if(count % stepNum == 0)isCutOff[i] = 1;}for(i = 0; i < totalBuilding; i++)if(isCutOff[i] == 0)return building[i];return 0;
}

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

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

相关文章

链表竟然比数组慢了1000多倍?(动图+性能评测)

这是我的第 215 期分享作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;数组和链表是程序中常用的两种数据结构&#xff0c;也是面试中常考的面试题之一。然而对于很多人来说…

c语言用宏定义常量_使用宏定义常量以在C的数组声明中使用

c语言用宏定义常量As we know that, while declaring an array we need to pass maximum number of elements, for example, if you want to declare an array for 10 elements. You need to pass 10 while declaring. Example: int arr[10]; 众所周知&#xff0c;在声明数组时…

HTML字体颜色设置

html字体颜色设置behavior移动效果>插入文字,alternate(交替滚动)、slide(幻灯片效果,指的是滚动一次,然后停止滚动) scrollAmount"移动速度" direction"方向"字体颜色设置字体< f o n t f a c e 宋 体 c o l o r # 9 9 3 2 c c s i z e 5 > 字…

zoj 1025 Wooden Sticks

题目见&#xff1a;zoj 1025 先对木棒按照长度进行排序&#xff0c;然后再计算对应重量构成的数组中非递减子序列的个数。 相关代码&#xff08;悲催的是该代码不能在poj1065 和hdoj1051 下通过&#xff0c;懒得看具体是什么原因了&#xff09; /* zoj 1025 Wooden sticks *…

win7安装python

2019独角兽企业重金招聘Python工程师标准>>> 官网下载 python 安装包&#xff0c;一个 .msi 文件&#xff0c;双击安装 右键[计算机]-属性-高级系统设置-环境变量&#xff0c;在[系统变量]中找到 Path 变量&#xff0c;双击&#xff0c;在值后面添加 python 的安装路…

漫画:Java如何实现热更新?

Arthas&#xff08;阿尔萨斯&#xff09;是 Alibaba 开源的一款 Java 诊断工具&#xff0c;使用它我们可以监控和排查 Java 程序&#xff0c;然而它还提供了非常实用的 Java 热更新功能。所谓的 Java 热更新是指在不重启项目的情况下实现代码的更新与替换。使用它可以实现不停机…

十进制数转换为十六进制数_十进制数制到十六进制数制的转换

十进制数转换为十六进制数Conversion of decimal number system into hexadecimal number system can be done by successively dividing an integral part by 16 till the quotient is 0 and then reading the remainder of all in the bottom to the top manner, where the b…

编译器开发相关资源

开发编译器相关的一些网络资源&#xff1a; how difficult is it to write a compiler? wikipedia compiler compiler 101 code competetion pl/0 (couses &#xff0c;source code ,another source code )and pl/I language the gentle compiler construction sys…

计算机二级考试C++考试大纲

基本要求: 1. 掌握C语言的基本语法规则。 2. 熟练掌握有关类与对象的相关知识。 3. 能够阅读和分析C程序。 4. 能够采用面向对象的编程思路和方法编写应用程序。 5. 能熟练使用Visual C6.0集成开发环境编写和调度程序。 考试内容&#xff1a; 一、 C语言概述 1. 了解C语言的基本…

自动化运维工具Saltstack详细介绍

Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段&#xff0c;可以看做是pssh弱化的Puppet的组合。间接的反映出了saltstack的两大功能&#xff1a;远程执行和配置管理。Saltstack使用Python开发&#xff0c;是一个非常简单易用和轻量级的管理工具。由Master和Minio…

为什么建议你使用枚举?

枚举是 JDK 1.5 新增的数据类型&#xff0c;使用枚举我们可以很好的描述一些特定的业务场景&#xff0c;比如一年中的春、夏、秋、冬&#xff0c;还有每周的周一到周天&#xff0c;还有各种颜色&#xff0c;以及可以用它来描述一些状态信息&#xff0c;比如错误码等。枚举类型不…

数据结构树二叉树计算节点_查找二叉树中叶节点的数量 数据结构

数据结构树二叉树计算节点Algorithm: 算法&#xff1a; One of the popular traversal techniques to solve this kind of problems is level order tree traversal (Read: Level Order Traversal on a Binary Tree) where we use the concept of BFS. 解决此类问题的一种流行…

重磅!阿里推出国产开源JDK!

简介Alibaba Dragonwell 是一款免费的, 生产就绪型Open JDK 发行版&#xff0c;提供长期支持&#xff0c;包括性能增强和安全修复。阿里巴巴拥有最丰富的Java应用场景&#xff0c;覆盖电商&#xff0c;金融&#xff0c;物流等众多领域&#xff0c;世界上最大的Java用户之一。Al…

部分排序算法c语言实现

代码比较粗糙&#xff0c;主要是用于对排序算法的理解&#xff0c;因而忽略了边界和容错处理相关代码。 相关文档&#xff1a; Insert Sort ,Bubble Sort ,Select Sort ,Shell sort ,Quick sort ,Heap sort ,Merge sort on Wikipedia algorithm Repository :C语言实现部分排…

计算机等级考试二级ACCESS考试大纲

公共基础知识部分30分 专业语言部分 70分 基本要求 1. 具有数据库系统的基础知识。 2. 基本了解面各对象的概念。 3. 掌握关系数据库的基本原理。 4. 掌握数据库程序设计方法。 5. 能使用Access建立一个小型数据库应用系统。 考试内容 一、 数据库基础知识 1. 基本概念&#xf…

C语言 常用单词

main 主要的 printf(print format)格式输出 include , return ,if ,else ,switch ,case 机箱&#xff1b;案例&#xff1b; default 默认 ,for while break 暂停&#xff1b;间断&#xff1b; continue math int char 字符&#xff1b; …

ipv6寻址_有类和无类寻址:IPV4寻址| 计算机网络

ipv6寻址1)分类寻址 (1) Classful Addressing) IPv4 addressing used the concept of classes. This architecture is known as classful addressing. IPv4寻址使用类的概念。 这种体系结构称为类寻址 。 In the classful addressing, there are 5 classes in which the addre…

windows没有软盘 怎么解决

1这种情况我遇到过。 现象为&#xff1a;启动快到桌面之前&#xff0c;会出现红叉错误提示框&#xff0c;标题为“Windows-没有软盘”&#xff0c;内容为“驱动器中没有软盘。请在\Device\Harddisk1\DR5 中插入软盘”&#xff0c;有“取消”、“重试”、“继续”三个按钮。点“…

forth编程语言

forth 是一种基于栈的程序设计语言&#xff0c;其语法使用逆波兰表达式&#xff08;即后缀表达式&#xff09;&#xff0c;forth的黄金期是上世纪80年代&#xff0c;现在使用的人很少&#xff0c;但是却非常的有趣。还有一个以forth为基础开发的语言factor ,它增加了许多当代的…

安装TPCC-MySQL报错

2019独角兽企业重金招聘Python工程师标准>>> 安装TPCC-MySQL做压力测试&#xff0c;由于TPCC-MySQL是bzr工具进行版本控制的&#xff0c;所以要先安装bzr [rootmha_backup /root] #rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.r…