A题:
思路:暴力一下就行,用long long,不然有可能会溢出,最好用C++,java有时候正确,有时候编译错误
AC代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x7f7f7f7f;//2139062143typedef long long ll;using namespace std;int main(){ ll a,b,n; while (scanf("%I64d%I64d%I64d",&a,&b,&n) != EOF) { int index = 0; ll min1 = LONG_LONG_MAX; for (int i=1; i<=n; i++) { if (n % i == 0) { ll sum = n / i * a + b * n * i; if (sum < min1) { min1 = sum; index = i; } } } PRintf("%d/n",index); } return 0;}D题:
思路:标称上是打表,我是用一个数组进行标记的,只要以前出现过这个数就退出,不然肯定会陷入死循环
AC代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x7f7f7f7f;//2139062143typedef long long ll;using namespace std;int getSum(int n){ int sum = 0; while (n != 0) { int temp = n % 10; sum += temp * temp; n /= 10; } return sum;}int main(){ int n; int a[10000]; while(scanf("%d",&n) != EOF) { int sum = n; memset(a,0,sizeof(a)); bool flag = false; while (true) { sum = getSum(sum); if (sum == 1) { flag = true; break; } if (a[sum] > 0) break; a[sum] = 1; } if (flag) cout << "YES" << endl; else cout << "NO" << endl; }}
新闻热点
疑难解答