约瑟夫问题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);
}
感恩一年有你!免费领取2核4G套餐!2核4G轻量应用服务器2核 CPU 4GB内存 60G SSD云硬盘 6Mbps带宽领取地址:https://cloud.tencent.com/act/pro/lighthousethankyou活动规则活动时间2021年9月23日 ~ 2021年10月23日活动对象腾讯云官网已注册且完成实名认证的国内站用户(协作者与子用户账号除外),且符合以下活动条件:账号...
A400互联是一家成立于2020年的商家,主要推行洛杉矶服务器采用kvm架构,线路优质,延迟低,稳定性高!全场产品对标腾讯云轻量,服务器线路有有美国洛杉矶cn2_gia、香港cn2+cmi,目前推行的vps服务器均为精心挑选的优质线路机房,A400互联推出了夏季优惠洛杉矶5折、香港7折促销活动,质量可靠,价格实惠!二:优惠码洛杉矶五折优惠码:20210620香港cn2七折优惠码:0710三、优惠方...
【双十二】兆赫云:全场vps季付六折优惠,低至50元/季,1H/1G/30M/20G数据盘/500G流量/洛杉矶联通9929商家简介:兆赫云是一家国人商家,成立2020年,主要业务是美西洛杉矶联通9929线路VPS,提供虚拟主机、VPS和独立服务器。VPS采用KVM虚拟架构,线路优质,延迟低,稳定性强。是不是觉得黑五折扣力度不够大?还在犹豫徘徊中?这次为了提前庆祝双十二,特价推出全场季付六折优惠。...
约瑟夫问题为你推荐
bloomfilter布隆过滤器既然有错误率,为什么还能应用在key-value系统中?网关和路由器的区别网关和路由器的区别是什么deviceid怎么能知道安卓系统手机的DEVICE ID?tvos智能电视都什么功能被广电封杀了?调度系统操作系统中为什么需要调度?弹幕播放器弹弹play播放器怎么样弹幕网站A站B站网址是什么,国内很出名嗎?有什么网站特点..清除电脑垃圾怎么删除电脑垃圾?清除电脑垃圾怎么清除电脑的垃圾啊?cf加速器玩CF需要用加速器吗?
河南vps 域名停靠一青草视频 3322动态域名 simcentric 秒解服务器 阿里云代金券 java虚拟主机 dd444 太原联通测速平台 godaddy域名证书 秒杀汇 静态空间 泉州移动 服务器监测 国外视频网站有哪些 ebay注册 群英网络 徐州电信 卡巴斯基试用版下载 海外加速 更多