约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。
程序如下: scanf和printf贼慢啊,为什么????
#include <cstdio>
using namespace std;
int n,m,f,s,t;
bool a[101];
int main()
{
scanf("%d%d",&n,&m);
for (t=1;t<=n;t++) a[t]=false;
f=0;t=0;s=0;
do
{
++t;
if(t==n+1)t=1;
if(a[t]==false) ++s;
if(s==m)
{
s=0;
printf("%d ",t);
a[t]=true;
f++;
}
}while(f!=n);
return 0;
}
而使用cin和cout怎么就这么快,谁来破???????
#include <iostream>
using namespace std;
int n,m,f,s,t;
bool a[101];
int main()
{
cin>>n>>m;
cout<<endl;
for (t=1;t<=n;t++) a[t]=false;
f=0;t=0;s=0;
do
{
++t;
if(t==n+1)t=1;
if(a[t]==false) ++s;
if(s==m)
{
s=0;
cout<<t<<" ";
a[t]=true;
f++;
}
}while(f!=n);
return 0;
}
程序如下: scanf和printf贼慢啊,为什么????
#include <cstdio>
using namespace std;
int n,m,f,s,t;
bool a[101];
int main()
{
scanf("%d%d",&n,&m);
for (t=1;t<=n;t++) a[t]=false;
f=0;t=0;s=0;
do
{
++t;
if(t==n+1)t=1;
if(a[t]==false) ++s;
if(s==m)
{
s=0;
printf("%d ",t);
a[t]=true;
f++;
}
}while(f!=n);
return 0;
}
而使用cin和cout怎么就这么快,谁来破???????
#include <iostream>
using namespace std;
int n,m,f,s,t;
bool a[101];
int main()
{
cin>>n>>m;
cout<<endl;
for (t=1;t<=n;t++) a[t]=false;
f=0;t=0;s=0;
do
{
++t;
if(t==n+1)t=1;
if(a[t]==false) ++s;
if(s==m)
{
s=0;
cout<<t<<" ";
a[t]=true;
f++;
}
}while(f!=n);
return 0;
}