约瑟夫问题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);
}
a400互联是一家成立于2020年商家,主营美国机房的产品,包括BGP线路、CN2 GIA线路的云服务器、独立服务器、高防服务器,接入线路优质,延迟低,稳定性高,额外也还有香港云服务器业务。当前,全场服务器5折,香港VPS7折,洛杉矶VPS5折,限时促销!A400互联官网:https://a400.net/优惠活动全场独服永久5折优惠(续费同价):0722香港VPS七折优惠:0711洛杉矶VPS五...
LOCVPS(全球云)发布了新上韩国机房KVM架构主机信息,提供流量和带宽方式,适用全场8折优惠码,优惠码最低2G内存套餐月付仅44元起。这是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。下面分别列出几款韩国机房KVM主机配置信息。韩国KVM流量型套餐:KR-Pl...
今天获得消息,vdsina上了AMD EPYC系列的VDS,性价比比较高,站长弄了一个,盲猜CPU是AMD EPYC 7B12(经过咨询,详细CPU型号是“EPYC 7742”)。vdsina,俄罗斯公司,2014年开始运作至今,在售卖多类型VPS和独立服务器,可供选择的有俄罗斯莫斯科datapro和荷兰Serverius数据中心。付款比较麻烦:信用卡、webmoney、比特币,不支持PayPal...
约瑟夫问题为你推荐
pcbetawindows7 7127下载rbf神经网络RBF神经网络和BP神经网络有什么区别settimer如何使用SetTimer MFC 够详细洗牌算法我是小白,eclipse说老式声明,怎么办?帮我看下,不胜感激!! //发牌算法rdl电脑主机上的dvd+rdl是什么意思郭凡生馬云的簡介3Qbindservice安卓里 remote service到底有什么用网页微信客户端手机微信客户端怎么打开网页smartupload使用SmartUpload实现文件上传时需要对表单设置哪些属性欢迎页面怎样取消“欢迎页面”?
100m网站空间 海外域名注册 游戏服务器租用 最新代理服务器地址 域名解析服务器 老域名全部失效请记好新域名 Dedicated iisphpmysql 密码泄露 火车票抢票攻略 地址大全 最好的免费空间 卡巴斯基试用版 免费美国空间 cdn加速是什么 中国网通测速 购买国外空间 韩国代理ip 畅行云 稳定空间 更多