0
已解决
胡钰妍
资深光能
资深光能
#include<bits/stdc++.h>
using namespace std;
struct dp
{
int flag;
int num;
};
dp a[1005];
int main()
{
int m,n;
cin>>m>>n;
int t=0,w=1;
for(int i=1;i<=n;i++)
{
t=t+w;
a[t].flag=1;
a[t].num++;
w++;
if(t>m)
t=t-m;
}
int fl=1;
for(int i=1;i<=m;i++)
{
if(a[i].flag==0)
{
fl=0;
cout<<i<<" ";
}
}
if(fl!=0)
{
int max1=-1;
for(int i=1;i<=m;i++)
{
if(a[i].num>max1)
max1=i;
}
cout<<max1<<endl;
}
return 0;
}
超时
0
已采纳
张帆
中级天翼
中级天翼
你这种方法太复杂,下面这种思路20行就能搞定:
定义m,n,输入m,n
定义一个a数组,记录每个灯泡被按下多少次,存储在灯泡编号-1的位置
定义一个指针变量d,初值为m-1
循环n次
每次d=(d+i)%m;
遍历每个灯泡,发现为0(a数组),直接输出i+1
then:
Accepted:100分
张帆在2020-11-03 19:03:02追加了内容
你这个代码超时了只能把cin改成scanf优化,按我讲的思路来就对了,我也看不懂你在写啥
PS:建议发问题的时候用“插入代码段”发代码
张帆在2020-11-03 19:13:03追加了内容
if(t>m)
t=t-m;
你在这里有考虑过t>m*2吗?
应改为
while(t>m) t=t-m
张帆在2020-11-03 19:15:21追加了内容
超时的话,按数据来说应该不会超时,不然你就把cin改成scanf,cout改成printf
0
李显晨
中级启示者
中级启示者
布尔 flag;
定义 n,m;
输入>>n>>m;
循环(int i=1;i<=m;i++) {
定义 t=(t+i)%n;
a[t]++;
}
循环(int i=1;i<=n-1;i++)
如果(a[i]==0) {
输出<<i<<" ";
flag=1;
}
如果(a[0]==0)
cout<<n;
数组自己定义
0
0
0
0
0