学习C++和C语言心得 9

分享一道非常有趣的题

开关门

题目描述:

宾馆里有n个房间,从1∼n编了号,开始都是关闭的。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”…,以后每个服务员都是如此。当第n

个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)

输入描述:

房间数n(2≤n≤1000)。

输出描述:

一行,由小到大的打开门的房间序号,各序号之间用一个空格隔开。

输入

复制

100

输出

复制

1 4 9 16 25 36 49 64 81 100

我的代码:

#include<iostream>

using namespace std;

int main()

{

int n,i,j,flag=0;

cin>>n;

int a[1003]={0};

for(i=1;i<=n;i++)

a[i]=1;

for(i=2;i<=n;i++)

{

for(j=1;j<=n;j++)

{

if(j%i==0)

a[j]=-a[j];

}

}

for(i=1;i<=n;i++)

{

if(a[i]==1&&flag==0)

{

flag=1;

cout<<i;

}else if(a[i]==1&&flag==1)

{

cout<<" "<<i;

}

}

}

这道题让我知道把开关定义为一个相反数这种思路的简便,还有让我知道了将一个数判断100遍和将100个数判断一遍两种写法的步骤与不同。

全部评论
怎么感觉是个思维题唉,看着好像就是分解质因数然后找规律只有平方才会保留
1 回复 分享
发布于 2023-11-08 21:59 湖北

相关推荐

03-13 16:51
已编辑
门头沟学院 硬件开发
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务