约瑟夫问题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);
}
RAKsmart 商家估摸着前段时间服务器囤货较多,这两个月的促销活动好像有点针对独立服务器。前面才整理到七月份的服务器活动在有一些配置上比上个月折扣力度是大很多,而且今天看到再来部分的服务器首月半价,一般这样的促销有可能是商家库存充裕。比如近期有一些服务商挖矿服务器销售不好,也都会采用这些策略,就好比电脑硬件最近也有下降。不管如何,我们选择服务器或者VPS主机要本着符合自己需求,如果业务不需要,...
41云怎么样?41云是国人主机品牌,目前经营产品有国内外云服务器、CDN(高防CDN)和物理机,其中国内外云服务器又细分小类有香港限流量VPS、香港大带宽VPS、香港弹性自选VPS、香港不限流VPS、香港BGP线路VPS、香港Cera+大带宽机器、美国超防VPS、韩国原生VPS、仁川原生VPS、日本CN2 VPS、枣庄高防VPS和金华高防VPS;物理机有美国Cera服务器、香港单程CN2服务器、香...
老薛主机,虽然是第一次分享这个商家的信息,但是这个商家实际上也有存在有一些年头。看到商家有在进行夏季促销,比如我们很多网友可能有需要的香港VPS主机季度及以上可以半价优惠,如果有在选择不同主机商的香港机房的可以看看老薛主机商家的香港VPS。如果没有记错的话,早年这个商家是主营个人网站虚拟主机业务的,还算不错在异常激烈的市场中生存到现在,应该算是在众多商家中早期积累到一定的用户群的,主打小众个人网站...
约瑟夫问题为你推荐
元数据管理请元数据管理包括哪些内容?拓扑关系拓扑关系在GIS中的作用索引超出了数组界限索引超出了数组界限是怎么回事啊?php论坛怎样快速在个人电脑上建立一个自己的PHP论坛服务器?欢迎页面windows欢迎界面faq是什么意思在国际贸易中“FAQ”代表的是什么意思暴力破解密码8位密码暴力破解要多久新手怎么制作表格怎么样在电脑上制作表格初学者银联商务招聘银联商务的正式工与派遣工有啥区别sungard恒生电子和上海sungard的offer,去哪个好???谢谢,,急急急!!!
ip代理地址 双线主机租用 万网域名代理 双线vps hostigation 独享100m kddi 网站卫士 傲盾官网 昆明蜗牛家 web服务器搭建 电信网络测速器 谷歌台湾 1美元 mteam 免费的加速器 cdn加速技术 phpwind论坛 2016黑色星期五 时间同步服务器 更多