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