求助一道学军的题
  • 板块学术版
  • 楼主mot1ve
  • 当前回复18
  • 已保存回复18
  • 发布时间2020/11/30 16:11
  • 上次更新2023/11/5 07:02:20
查看原帖
求助一道学军的题
250699
mot1ve楼主2020/11/30 16:11

思路:纯模拟,但第三个样例输出288。

//暴力模拟,按位算
#include<bits/stdc++.h>
using namespace std;
int ans,T;
vector<int> g;
int cal(int x)//计算这个数有几位
{
    return (int)(log10(x))+1;
}
int main()
{
    cin>>T;
    while(T--)
    {
        int l,r;
        ans=0;
        scanf("%d%d",&l,&r);
        //i一定合法,看翻转数是否合法。
        for(int i=max(l,10);i<=r;i++)//暴力判断
        {
            int ii=i;
            g.clear();//清空vector
            int k=cal(ii);//k表示i有几位
            for(int j=1;j<=k;j++)//按位拆分到一个vector里
            {
                g.push_back(ii%10);
                ii/=10;
            }
            reverse(g.begin(),g.end());//每一位存到了数组里
            for(int j=1;j<k;j++)//进行k-1次翻转
            {
                g.push_back(g.front());
                g.erase(g.begin());
                //得到了一个新数x,看x是否满足l<=x<=r;
                int p=0;
                while(g[p]==0)
                p++;
                int temp=0;
                while(p!=g.size())
                {
                    temp*=10;
                    temp+=g[p];
                    p++;
                }
                if(temp<=i)//避免重复的 
                continue;
                if(temp>=l&&temp<=r)
                {
                    ans++;
                    cout<<i<<" "<<temp<<endl;
                }                
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
2020/11/30 16:11
加载中...