又调了一会 太蠢了 发现还是边界判定的问题 直接比一下上下区间的首位数x11111,看看首位数同位数完美数在不在区间内就行了
anyway 评论区大佬说到的直接列举完美数在不在区间是最好的 之前做区间质数的时候倒是能想起穷举这茬 今天笔试时候就知道死调了 唉 凉凉
题二,求区间完美数,t组输入,xy表示上下区间
考试时候因为不能用本地IDE 调了一个多小时也只过了30%的点
考完代码粘贴到本地后,也试了各种点,实在是没有问题呀,有无AC的大佬来说说究竟是没考虑什么状况
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; long x,y,mx,my; long k,cx,cy,ans; vector<int> anss; for (int i=0;i<t;i++) { cin>>x>>y; ans=0;cx=0;cy=0; mx=x%10;my=y%10; if (x<=y) { while(x!=0) { k=x%10; if (k>mx) mx=k; x=x/10; cx++; } if (mx>k) mx=k+1<10?k+1:-1; while(y!=0) { k=y%10; if (k<my) my=k; y=y/10; cy++; } if (my<k) my=k-1>=0?k-1:0; if (cx==cy) { ans=my-mx+1; if (my==0&&mx==0) ans=0; if (mx>my) ans=0; } else { ans=9*(cy-cx-1); ans+=my; if (mx!=-1) ans+=10-mx; } } anss.push_back(ans); } for (int i=0;i<t;i++) cout<<anss[i]<<endl; return 0; }
全部评论
(4) 回帖