点赞(1)
 

0.0分

126 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 27 条评论

直城多线金马转弩手海 10月前 回复TA
简化版
#include<iostream>
using namespace std;
int shu(int n){
	int a[n]={0};
	int i=0,cnt=0,cnt2=0;
	for(;cnt2<n;i=(i!=n-1)?i+1:0){
		if(a[i]==0) {a[i]=(++cnt%3==0)?1:0;cnt2+=(cnt%3==0)?1:0;}
	}
	
	return (i==0?n:i);
}
int main()
{
	int n;
	while(cin>>n) cout<<shu(n)<<endl;
	return 0;
}
直城多线金马转弩手海 10月前 回复TA
#include<iostream>
using namespace std;
int shu(int n){
	int a[n]={0};
	for(int i=0,cnt=0,cnt2=0;cnt2<n-1;i=(i!=n-1)?i+1:0){
		if(a[i]==0) {
			a[i]=(++cnt%3==0)?1:0;
			cnt2+=(cnt%3==0)?1:0;
		}
	}
	int k=0;
	for(int i=0;i<n;i++) k=(a[i]==0)?i:k;
	return k+1;
}
int main()
{
	int n;
	while(cin>>n) cout<<shu(n)<<endl;
	return 0;
}
kysa 1年前 回复TA
@明月几时有 兄弟,你这就转了一圈就不转了是吧,666,改题大法
旋转跳舞我闭着眼 1年前 回复TA
@旋转跳舞我闭着眼 对不起,我又检查了几遍,发现算法没问题,是我的问题,实在不好意思
旋转跳舞我闭着眼 1年前 回复TA
最后的最优算法有问题,当n=3的时候它算的是1,而实际是2才对
pointer 1年前 回复TA
@pointer 谢谢哥哥~
这个bug未免太机车了啦 1年前 回复TA
@pointer 意义就是,在报数不是0的时候,这个编号进入最后一个人的下一位进行后续报数
pointer 1年前 回复TA
q.push(q.front());            //排至队尾
                q.pop();
queue中,这两句什么意思,是把对头的数,在对尾又加了一个,再删去吗,有啥意义呢
明月几时有 2年前 回复TA
#include<stdio.h>

void Num(int n);
int main()
{
	int n;
	scanf("%d",&n);
	Num(n);
}


void Num(int n)
{
    int num;
    if(n%3==0)
    {
        num=n-1;
    }
    else
    {
        num=n;
    }
    printf("%d",num);
}
吕金洋 2年前 回复TA
这里的m好像没有用到