期中二

     n个开关排成一排,从1n按顺序依次编号。有n个人也从1n依次编号。第1个人(1号)将开关全部打开。第2个人(2号)将凡是22的倍数的开关关闭。第3个人(3号)将凡是33的倍数的开关做相反处理(该开关如为打开的,将它关闭;如为关闭的,将它打开)。以后的人都和3号一样,将凡是与自己编号相同的开关和是自己编号倍数的开关做相反处理。编程求解:当第n个人操作之后,哪几个开关是打开的?(注意n为正整数,可以从键盘输入)

 

#include <IOSTREAM.H>

int main(int argc, char* argv[])
{
    int a[100];
    int i , j , n;
    cout << "输入整数n:\n" ;
    cin >> n;
    for (i=0 ; i <= n ;i++)
    {
        a[i] = 1;
    }
    for (i=2 ; i <= n; i++)
    {
        for (j=1 ; i*j <= n; j++)
        {
            if (a[i*j]==0)
            {
                a[i*j]=1;
            }
            else
            {
                a[i*j]=0;
            }
        }
    }
    cout << "打开的开关是:\n";
    for (i=1 ; i<=n ; i++)
    {
        if (a[i]==1)  cout <<"第"<<i<<"个\n" ;
    }
    return 0;
}

Related Articles

Quote Of The Day