约瑟夫问题c语言解决约瑟夫问题
约瑟夫问题 时间:2021-07-16 阅读:(
)
约瑟夫问题。一个递推公式求解释我没整出来。不过应该不难。
#include<stdio.h>
#include<string.h>
int last(int num, t)
{
char m, n, dat[100], p= 0, len= num;
for(m= 0; m < num; m++)
dat[m]= m;
dat[m]= 0;
for(m= 0; m < num-1; m++)
{
for(n= 0; n<t; n++)
{
p++;
if(p > len)
p= 1;
}
printf("p=%d", p);
strcpy(&dat[p-1], &dat[p]);
p-= 1;
len--;
for(int i= 0; i< len ; i++)
printf("%3d", dat[i]);
printf("
");
}
return dat[0];
}
int main()
{
last(10, 3);
return 0;
}约瑟夫问题c语言
#include
#define size 100 /* 输入人数的上限 */
void main()
{
int person[size];
int i, j; /* 循环修正变量 */
int arrayLen; /* 数组长度 */
int start, overNum; /* 开始位置各跨过位置 */
int deleNum; /* 出列人所在数组中的下标 */
int name, total; /* 输入时,人的信息以及人的总数 */
printf( "请输入圆桌上人的总数: " );
scanf( "%d", &arrayLen ); printf( "
" );
if( ( arrayLen > size ) || ( arrayLen < 0 ) )
{
printf( "超出范围,请重新输入: " );
scanf( "%d", &arrayLen ); printf( "
" );
};
printf( "请输入各个人的信息(整数):
" );
for( i = 0; i < arrayLen; i++ )
{
scanf( "%d", &name );
person[i] = name;
}
printf( "你输入的数据的顺序为:
" );
for( i = 0; i < arrayLen - 1; i++ )
printf( " %d ==>", person[i] );
printf( "%d
", person[arrayLen - 1] );
printf( "你打算从第几个人开始? 请输入开始号: " );
scanf( "%d", &start );
printf( "
" );
start = start - 1;
printf( "请输入相邻两出列人之间的间隔: " );
scanf( "%d", &overNum );
printf( "
" );
total = arrayLen;
printf( "程序运行后,出列人的顺序为:
" );
for( i = 0; i < total; i++ ) /* 要打印total个人的情况,故做total次 */
{
if ( arrayLen == 1 )
printf( "%d", person[0] ); /* 如果是数组只剩一个元素,直接出列 */
else
{
deleNum = ( start + overNum - 1 ) % arrayLen; /* 此取模保证循环 */
printf( "%d ==> ", person[deleNum] );
for ( j = deleNum; j < arrayLen; j++ ) /* 将出列元素后面的各元素前移 */
person[j] = person[j+1];
start = deleNum;
arrayLen = arrayLen - 1; /* 移动完毕后,数组长度减1 */
}
}
printf( "
" );
}
从一本数据结构书上看到的用向量实现此问题:
void Josephus (Vector &P, int n, int s, int m)
{
//将人员编号存入向量P;
int k = 1;
for(int i = 0; i=1; j--)
{
s1=(s1+m-1)%j;
if(s1== 0) s1 = j;
int w = P.Getnode(s1 - 1);
P.Remvoe(s1 - 1);
P.Insert(w,n-1);
}
}
以前学C语言的时侯写的,希望对你有用。
c语言解决约瑟夫问题
我自己写的直接用一维数组解决
#include<stdio.h>
#define N 9 //总人数
#define K 1 //开始数数的人
#define M 3 //间隔的人数
//给数组赋值
void setDate(int a[],int n)
{ int i;
for(i=0;i<n;i++)
a[i]=i+1;
}
//删除被选中的孩子
void deleted(int a[],int m,int len)
{
int i=m;
do
{
a[i]=a[i+1];
i++;
}while(i<len);
}
//开始play
void play(int a[],int k,int m)
{
int len =N;
int dm=k+m-2;//第一个被剔除的孩子
while(len!=1)
{printf("第%d个孩子被剔除。
",a[dm]);
deleted(a,dm,len);//将被剔除的孩子从数组中删除
dm=dm+M-1;//下一个被剔除的孩子
len--;//数组的长度减1
if(dm>=len) dm=dm-len;
}
printf("最后一个孩子是%d.",a[0]);//最后一个孩子被放在a[0]中
}
main()
{
int a[N];
setDate(a,N);
play(a,K,M);
}
hypervmart怎么样?hypervmart是一家成立了很多年的英国主机商家,上一次分享他家还是在2年前,商家销售虚拟主机、独立服务器和VPS,VPS采用Hyper-V虚拟架构,这一点从他家的域名上也可以看出来。目前商家针对VPS有一个75折的优惠,而且VPS显示的地区为加拿大,但是商家提供的测速地址为荷兰和英国,他家的优势就是给到G口不限流量,硬盘为NVMe固态硬盘,这个配置用来跑跑数据非常...
公司介绍成都随风云科技有限公司成立于2021年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新&...
厦门靠谱云股份有限公司 双十一到了,站长我就给介绍一家折扣力度名列前茅的云厂商——萤光云。1H2G2M的高防50G云服务器,依照他们的规则叠加优惠,可以做到12元/月。更大配置和带宽的价格,也在一般云厂商中脱颖而出,性价比超高。官网:www.lightnode.cn叠加优惠:全区季付55折+满100-50各个配置价格表:地域配置双十一优惠价说明福州(带50G防御)/上海/北京1H2G2M12元/月...
约瑟夫问题为你推荐
图片地址怎么知道一张图片的地址mindmanager破解版请给个Mindjet MindManager PRO 15的正式版拓扑关系什么是矢量数据、栅格数据、拓扑关系?备忘录模式华为荣耀5X怎么在手机上新建一个备忘录arc是什么意思数学中的arctan是什么意思丁奇请全面剖析一下黑胡子丁奇这个人物。丁香园网站丁香园主网站用的是什么程序??谁能看的出来??mergecellsExcel 合并及计数宏 VBA银联商务招聘中国银联商务有限公司工资待遇情況如何?qq号码查询如何查看自己手机的QQ号
移动服务器租用 提供香港vps 如何注册网站域名 com域名抢注 web服务器的架设 me空间社区 服务器托管什么意思 爱奇艺会员免费试用 万网空间购买 in域名 西安主机 卡巴斯基官网下载 密钥索引 wordpress空间 贵州电信 镇江高防服务器 碳云 服务器机柜 火山互联 iptables 更多