PE52

/* 125874を2倍すると251748となる. これは元の数125874と同じ数を含む. 2x, 3x, 4x, 5x, 6xがxと同じ数を含むような最小の正整数xを求めよ. */ #include <Windows.h> #include <iostream> #include <vector> #include <set> using namespace std; bool Problem52(unsigned N) { set<int> original; set<int> doubled; for (int i=2; i<=6; i+=1) { int tmp = N; int dtmp = tmp * i; //cout << tmp << " " << dtmp << endl; while (tmp!=0) { int n = tmp % 10; original.insert(n); tmp /= 10; } while (dtmp!=0) { int n = dtmp % 10; if (!original.count(n)) return false; doubled.insert(n); dtmp /= 10; } if (original != doubled) return false; } return true; } int main() { DWORD start = GetTickCount(); for (int i=123456; ;i++) { if (Problem52(i)) { cout << i << endl; DWORD end = GetTickCount(); cout << "the running time = " << end - start << " ms." << endl; return 0; } } return 0; } 

 

51开始的题目难度上升了。

 

 

#include <stdio.h> #include <stdlib.h> inline int check(int num) { int numz[10] = {0}; int swap,i ; for (swap = num; swap != 0; swap /= 10) numz[swap % 10]++; for (i = 2 ; i <= 6 ; i++) { for (swap = num * i; swap != 0; swap /= 10) if (! (numz[swap % 10])) // pure luck return 0; } return 1; } int main() { int i; for (i = 10 ;; i++) if (check(i)) break; return printf("%d/n" , i); }

 

你可能感兴趣的:(PE52)