dnsn7


私信TA

用户名:uq_85498979573

访问量:373

签 名:

等  级
排  名 42465
经  验 353
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:
枚举组成5,6位的那些数字,再组成,用set存储(自动排序),因为有相同再次插入也没事;
注意事项:
判断有0在组合中的情况
参考代码:

#include<iostream>

#include<algorithm>

#include<map>

#include<string>

#include<queue>

#include<set>

#define ll long long

using namespace std;

inline ll read() {

ll s = 0, w = 1;

char c = getchar();

while (c < '0' || c>'9') {

if (c == '-') w = -1;

c = getchar();

}

while (c <= '9' && c >= '0') s = s * 10 + c - '0', c = getchar();

return s * w;

}

set<int>s;

void fff(int a, int b, int c) {        //枚举两个a,两个b。两个c的情况

int k = (a * 100 + b * 10 + c) * 1000 + c * 100 + b * 10 + a;

if (k > 9999 && a != 0) s.insert(k) ;            //特判开头不能为零,不然就变5位数了,如(0)11110,但是中间有0没事,如110011,

swap(a, b);

k = (a * 100 + b * 10 + c) * 1000 + c * 100 + b * 10 + a;

if (k > 9999 && a != 0) s.insert(k);

swap(a, c);

k = (a * 100 + b * 10 + c) * 1000 + c * 100 + b * 10 + a;

if (k > 9999 && a != 0) s.insert(k);

swap(a, b);

k = ((a * 100 + b * 10 + c) * 1000 + c * 100 + b * 10 + a);

if (k > 9999 && a != 0) s.insert(k);

swap(a, c);

k = ((a * 100 + b * 10 + c) * 1000 + c * 100 + b * 10 + a);

if (k > 9999 && a != 0) s.insert(k);

swap(a, b);

k = ((a * 100 + b * 10 + c) * 1000 + c * 100 + b * 10 + a);

if (k > 9999 && a != 0) s.insert(k);

}

void ff(int a, int b) {//前面a为4个数字的,后面的为两个数字

int k = ((a * 100 + a * 10 + b) * 1000 + b * 100 + a * 10 + a);

if (k > 9999&&a!=0) s.insert(k);

k = ((a * 100 + b * 10 + a) * 1000 + a * 100 + b * 10 + a);

if (k > 9999&&a!=0) s.insert(k);

k = ((b * 100 + a * 10 + a) * 1000 + a * 100 + a * 10 + b);

if (k > 9999&&b!=0) s.insert(k);

}

void f(int a,int b) {              //全为a数字,共b(5或6)位

int k=(((a*10+a)*10+a)*10+a)*10+a;

if (k > 9999) {

if (b == 6&&(k*10+a)>99999)s.insert((k * 10 + a));

else s.insert(k);

}

}

void f5(int a, int b, int c) {               //a两个,b两个,c一个

int k = ((a * 100 + b * 10 + c) * 100 + b * 10 + a);

if(k>9999)s.insert(k);

swap(a, b);

k = ((a * 100 + b * 10 + c) * 100 + b * 10 + a);

if (k > 9999)s.insert(k);

}

void f2(int a, int b) {                      //三个a,一个b

int k;

k = (b * 100 + a * 10 + a) * 100 + a * 10 + b;

if (k > 9999) s.insert(k);

}

int main() {

     ll n = read();

  for (int i = 0; i <= 9; i++) {

            if (i * 5 == n) f(i, 5);

            if (i * 6 == n) f(i,6);

        for (int j = 0; j <= 9; j++) {

            if (i * 3 + j * 2 == n) f2( i, j);

            if (i * 4+j*2 == n) ff(i,j);

           for (int k = 0; k <= 9; k++) {

                if (i * 2 + j * 2 + k == n) f5(i, j, k);

                if (i * 2 + j * 2 + k * 2 == n)fff(i, j, k);

            }

        }

  }

if (s.empty()) cout << -1;

else for (auto p : s) cout << p << endl;

return 0;

}


 

0.0分

3 人评分

  评论区

  • «
  • »