zoukankan      html  css  js  c++  java
  • 开灯问题

    开灯问题

    n盏灯,第1个人全部打开,后面的人按下自己序号倍数的灯的开关(改变灯状态),一共k个人。输入n,k,输出开着的灯的编号。k<=n<=1000。

    样例输入    7 3     样例输出   1 5 6 7

    ①我的程序

    #include<iostream>
    #define maxn 1010
    int a[maxn];
    using namespace std;
    int main(void)
    {
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=0;i<maxn;i++)
    a[i]=1;
    for(int j=2;j<=k;j++)
    for(int t=2;t<=n;t++)
    {
    if(t%j==0) a[t-1]++;
    }
    for(int m=0;m<n;m++)
    {
    if(a[m]%2!=0) printf("%d ",m+1);
    else continue;
    }
    return 0;

    }

     测试

     试试其他数据

    ②例题答案

    #include<iostream>
    #include<string.h>
    #define maxn 1010
    int a[maxn];
    using namespace std;
    int main(void)
    {
    int n,k,first=1;//标识变量first——表示当前要输出的变量是否为第一个。第一个变量前不应有空格,但其他变量有
    memset(a,0,sizeof(a));//数组清零 ,在string.h中定义
    scanf("%d%d",&n,&k);
    for(int i=1;i<=k;i++)
    for(int j=1;j<=n;j++)
    if(j%i==0) a[j]=!a[j];//a[j]=!a[j]来改变状态
    for(int i=1;i<=n;i++)
    if(a[i]) {
    if(first) first=0;
    else printf(" ");
    printf("%d",i);
    }
    printf(" ");
    return 0;
    }

    值得学习改正的地方

    首先,用标识变量first来控制输出格式,保证输出的第一个数据前没有空格,同时最后一个数据后直接回车 ,没有多余的空格,输出格式标准。

    同时,改变状态用a[j]=!a[j],比自己的程序中改变一次状态即加一,最后根据对应序号是奇数还是偶数巧妙。

    用string.h中的memset函数将数组清零:memset(a,0,sizeof(a));

  • 相关阅读:
    关系图的缩放、拖移、边上的关系显示、自定义等
    数据嵌入js的关系图
    十二周周四
    去除mysql里面重复的行并留下id最小的
    十一周周日
    十一周周六
    计算一个字符串中每个词的数量并降序输出
    账户 需求分析
    《人月神话》阅读计划
    读博客,了解本学期《软件需求与分析》掌握必要的内容
  • 原文地址:https://www.cnblogs.com/slay/p/9332485.html
Copyright © 2011-2022 走看看