首页 > 学院 > 开发设计 > 正文

“玲珑杯”ACM比赛 Round #11

2019-11-06 06:50:46
字体:
来源:转载
供稿:网友

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;    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表