USACO Section 2.2: Runaround Numbers

简单题

 1 /*

 2 ID: yingzho1

 3 LANG: C++

 4 TASK: runround

 5 */

 6 #include <iostream>

 7 #include <fstream>

 8 #include <string>

 9 #include <map>

10 #include <vector>

11 #include <set>

12 #include <algorithm>

13 #include <stdio.h>

14 #include <queue>

15 #include <cstring>

16 

17 using namespace std;

18 

19 ifstream fin("runround.in");

20 ofstream fout("runround.out");

21 

22 int N;

23 

24 int weishu(int n) {

25     int ret = 0;

26     while (n) {

27         n /= 10;

28         ret++;

29     }

30     return ret;

31 }

32 

33 bool isRunAround(int n) {

34     int acount = weishu(n);

35     vector<bool> visit(acount);

36     string s;

37     while (n) {

38         if (n % 10 == 0) return false;

39         s += '0' + n % 10;

40         n /= 10;

41     }

42     reverse(s.begin(), s.end());

43     int cur = 0;

44     int len = s.size();

45     for (int i = 0; i < acount; i++) {

46         cur = (cur + int(s[cur] - '0')) % len;

47         if (visit[cur]) return false;

48         visit[cur] = true;

49     }

50     return true;

51 }

52 

53 bool isUnique(int n) {

54     set<int> S;

55     while (n) {

56         if (S.count(n % 10)) return false;

57         S.insert(n % 10);

58         n /= 10;

59     }

60     return true;

61 }

62 

63 int main()

64 {

65     fin >> N;

66     int M = N+1;

67     while (1) {

68         if (isUnique(M) && isRunAround(M)) break;

69         M++;

70     }

71     fout << M << endl;

72 

73     return 0;

74 }

 

你可能感兴趣的:(number)