• 整除(水题)


    羊羊整除
    (div.pas/c/cpp)
    【问题描述】
    羊年到了,村长开始教小羊学习 Pascal 语言,刚开始学习四则运算。村长在白板上
    下两个整数 16 和 3,问小羊们,有 16 只羊,平均分到 3 个羊村,每个羊村分到的数量必
    相同,这个分配的数量最大是多少?小羊们很快就得到了答案,每个羊村分到 5 只,有
    只羊就只能落单了。村长在白板上写下 5。没错,这个就是 Div(整除)的用法!
    为了检验小羊们是否掌握了整除运算,村长要求小羊们轮流从白板上任意选取两个不
    的数,由大数整除小数,若所得结果没有出现在白板上,就将该值写在白板上。直到小羊
    再也找不到没出现过的整数。
    虽然这样上课很锻炼小羊们的运算能力,但是课堂时间有限。为了控制课堂时间,村
    想要知道,根据当前白板上的数字,最终白板上会出现几个数字?现在请你帮他编写一个
    序快速计算一下吧!
    【输入】
    第一行一个整数 N,表示当前白板上出现的整数个数。
    第二行 N 个整数,中间用空格分隔,表示当前在白板上的数字,保证每个数字都不
    同。
    【输出】
    输出一个整数,表示最终白板上数字的个数。
    【输入输出样例 1】
    div.in div.out
    2
    16 3
    4
    【样例 1 解释】
    选择 16 和 3,写下 5; 选择 5 和 3,写下 1;共 16, 3, 5, 1,四个整数。
    【输入输出样例 2】
    div.in div.out
    3
    17 2 1
    5
    【样例 2 解释】
    选择 17 和 2,写下 8;再选择 8 和 2,写下 4;共 17, 2, 8, 4, 1,五个整数。
    【数据范围】
    50%的数据, N<=50;
    100%的数据, N<=100, 1<=ai<=100。

    本题使用的是桶的思路。开a[105]的桶

    初始化,先读入所有数,将所有数放入桶中。

    i从100至1扫描。如果a[i]有数,则j从a[i]至1扫,a[a[i]/j]=1(此处有数)。

    下面是代码

    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    int i,j,k,n,m,tot;
    int f[105],a[105];
    int read(void) {
        char c; while (c=getchar(),(c<'0' || c>'9') && c!='-'); int x=0,y=1;
        if (c=='-') y=-1; else x=c-'0'; 
        while (c=getchar(),c>='0' && c<='9') x=x*10+c-'0'; return x*y;
    }
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++){
            f[i]=read();
            a[f[i]]=1;
        }
        for(int i=100;i>=1;i--)
         if(a[i]==1)
          for(int j=i-1;j>=1;j--)
           if(a[j]==1)
           a[i/j]=1;
        for(int i=1;i<=100;i++) if(a[i]==1) tot++;
        printf("%d",tot);
        return 0;   
    }
    
    
  • 相关阅读:
    鲁迅说过搜索引擎
    下载github上文件与release的安装包-解决s3.amazonaws.com问题
    作业九----DFA最小化
    作业八----非确定的自动机NFA确定化为DFA
    作业七----正规式到正规文法与自动机
    作业六----正规文法与正规式
    第五次作业----词法分析程序的设计与实现
    第四次作业
    作业三
    2.文法和语言
  • 原文地址:https://www.cnblogs.com/stevensonson/p/7612218.html
Copyright © 2020-2023  润新知