问题标题: 酷町堂:悬赏80 豆:3882 我有长辈 求思路😭

0
0

0
已采纳
张帆
张帆
中级天翼
中级天翼

首先输入,mark数组标记a[i],表示有a[i]这个数,边输入,边循环取最大,为以后循环找长辈做铺垫,

那么输入代码就是:

for(int i=1;i<=n;i++){
        cin>>a[i];
        mark[a[i]]=true;
        if(a[i]>maxn){
            maxn=a[i];
        }
    }

循环每个数找TA的长辈,找到,就cnt++;

具体找的方法是循环此数的倍数到maxn结束,若mark[j]==true且a[i]!=a[j]

若满足,cnt++,break掉,因为题目问有几个数有长辈,只要有,就cnt+1,break,避免重复计算。

代码就形成了:

 for(int i=1;i<=n;i++){
        for(int j=a[i]*2;j<=maxn;j+=a[i]){
            if(mark[j]==true&&a[j]!=a[i]){
                cnt++;
                break;
            }
        }
    }

 

0
汪恺恒
汪恺恒
中级启示者
中级启示者

思路

输入数组
b[a[i]]=1;
maxn=max(a[i],maxn);

之后进行筛法处理

循环int i=1;i<=n;i++){
        循环(int j=a[i]*2;j<=maxn;j+=a[i]){//寻找倍数
            如果(b[j]==1){//说明有长辈
                cnt++;
                结束循环;
            }
        }
    }

 

0
0
我要回答