哪位会一点点算法的仁兄进来帮助一下,要求用C语言实现,我要寻求一种最好的方法 100只猴子从1 到3报数,报3的被淘汰,问最后剩下的一只是原来的第几只?编程解决用C语言,谢谢各位了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建立一个数组a[100],全部初始化为1.两个变量,一个i表示当a的下标,一个j记录当前数的个数有没有到三,j=3就a[i]=0.while循环就行了. 这是一个约瑟夫环算法的经典问题.#include <stdio.h>#include <stdlib.h>int main(void){ int a[100]={0}; int i, j, s; for (i = 0;i < 100;i++) { a[i] = i + 1; /* 填空数组,编号是下标加一,注意C语言中的数组下标从0开始 */ } i=0; s=100; j=0; while(s > 1) { if(a[i%100] != 0) { if((i+1-j)%3 == 0) { printf("%d\n",a[i%100]); /* 把这个家伙打印出来 */ a[i%100] = 0; s--; } } else j++; i++; } for(i=0; i<100; i++) if(a[i] != 0) printf("最后一个是:%d\n",a[i]); system("pause"); return 0; } 呵呵,楼上的楼上完全错误,正确的是:(100%正确!)#include <stdio.h>#include <stdlib.h>int main(){ int a[100]={0}; int i,j,k,flg0,flg3=1; int out_5=0; for (i=0;i<100;i++) { a[i]=i+1; } flg0=100; printf("被提出的顺序为:"); while (flg0>2) { for (j=0;j<100;j++) { if(a[j]!=0) { if(flg3%3==0) { if(out_5%5==0) printf("\n"); printf("%d ",a[j]); out_5++; a[j]=0; } flg3++; } } flg0=0; for(i=0;i<100;i++) { if (a[i]!=0) { flg0++; } } } printf("\n最后留下的是:\n"); for(i=0;i<100;i++) { if(a[i]!=0) printf("%d ",a[i]); } scanf("%d",&k); return 0;} 不对 ,我写错了一个数字,呵呵,改正如下:#include <stdio.h>#include <stdlib.h>int main(){ int a[100]={0}; int i,j,k,flg0,flg3=1; int out_5=0; for (i=0;i<100;i++) { a[i]=i+1; } flg0=100; printf("被提出的顺序为:"); while (flg0>1) { for (j=0;j<100;j++) { if(a[j]!=0) { if(flg3%3==0) { if(out_5%5==0) printf("\n"); printf("%d ",a[j]); out_5++; a[j]=0; } flg3++; } } flg0=0; for(i=0;i<100;i++) { if (a[i]!=0) { flg0++; } } } printf("\n最后留下的是:\n"); for(i=0;i<100;i++) { if(a[i]!=0) printf("%d ",a[i]); } scanf("%d",&k); return 0;} 项目生成发布后运行报错。 同样的读取数据库,将结果存入硬盘和写到LISTVIW控制里面显示为什么时间差别很大! C# 跟C++ 3des跟md5 加密解密 C#读写文件 送分啊! 急!!求教诸位一个关于winform里的datagridview里选取多项数据作为查询条件的问题 C#网络编程高手请进 请教各位怎么改用户名(字母)后面的说明文字啊 . 怎么在CSDN上找不到这个功能啊 . c#入门经典里的问题 报表控件,具有类似Excel编辑功能的??? 窗体的问题 怎么把stream转成MemoryStream 如何实现按下空格键就执行窗体中的Button_Click事件?
两个变量,一个i表示当a的下标,一个j记录当前数的个数有没有到三,j=3就a[i]=0.
while循环就行了.
#include <stdio.h>
#include <stdlib.h>int main(void)
{
int a[100]={0};
int i, j, s;
for (i = 0;i < 100;i++)
{
a[i] = i + 1; /* 填空数组,编号是下标加一,注意C语言中的数组下标从0开始 */
}
i=0;
s=100;
j=0;
while(s > 1)
{
if(a[i%100] != 0)
{
if((i+1-j)%3 == 0)
{
printf("%d\n",a[i%100]); /* 把这个家伙打印出来 */
a[i%100] = 0;
s--;
}
}
else
j++;
i++;
}
for(i=0; i<100; i++)
if(a[i] != 0)
printf("最后一个是:%d\n",a[i]);
system("pause");
return 0;
}
#include <stdlib.h>int main()
{
int a[100]={0};
int i,j,k,flg0,flg3=1;
int out_5=0;
for (i=0;i<100;i++)
{
a[i]=i+1;
} flg0=100;
printf("被提出的顺序为:");
while (flg0>2)
{
for (j=0;j<100;j++)
{
if(a[j]!=0)
{
if(flg3%3==0)
{
if(out_5%5==0)
printf("\n");
printf("%d ",a[j]);
out_5++;
a[j]=0;
}
flg3++;
}
}
flg0=0;
for(i=0;i<100;i++)
{
if (a[i]!=0)
{
flg0++;
}
}
}
printf("\n最后留下的是:\n");
for(i=0;i<100;i++)
{
if(a[i]!=0)
printf("%d ",a[i]);
} scanf("%d",&k); return 0;
}
#include <stdlib.h>int main()
{
int a[100]={0};
int i,j,k,flg0,flg3=1;
int out_5=0;
for (i=0;i<100;i++)
{
a[i]=i+1;
} flg0=100;
printf("被提出的顺序为:");
while (flg0>1)
{
for (j=0;j<100;j++)
{
if(a[j]!=0)
{
if(flg3%3==0)
{
if(out_5%5==0)
printf("\n");
printf("%d ",a[j]);
out_5++;
a[j]=0;
}
flg3++;
}
}
flg0=0;
for(i=0;i<100;i++)
{
if (a[i]!=0)
{
flg0++;
}
}
}
printf("\n最后留下的是:\n");
for(i=0;i<100;i++)
{
if(a[i]!=0)
printf("%d ",a[i]);
} scanf("%d",&k); return 0;
}