Life of xhu

About

HOJ_1365 & HOJ_1370

Feb 16, 2014

  |   #HOJ

昨天到的学校,今天去接了豆豆,这个学期就算正式开学了。明天准备去找一下黄老师,弄一下毕业设计的事,可是芯片的相关内容还是没看什么,总感觉没法交差,关键是网上全是英文资料啊,怨念ing。。。

不过C语言感觉有了很大进步,《C Primer Plus》看了300页,虽然笔记没了,但是心里有底了。

今天还是没闲下来,延续寒假的节奏,刷了两道水题。

~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~

1365: 这道题就是给一个数N,求一个多位数使其各位上的数字乘积等于N

注意一下如果N0,则输出10,如果N19,那么就输入N

其他的,就一直循环用92除,大的数字放在低位,当N被除尽,或者出现无法整除的情况时跳出循环。

代码如下:

#include <iostream>
using namespace std;

int main(){
    int N, count, result, digits[100];
    bool divisible, finish;
    while(cin >> N && N != EOF){
        if(N == 0)
            cout << 10 << endl;
        else if(N == 1)
            cout << 1 << endl;
        else{
            count = 0;
            result = N;
            finish = false;
            while(1){
                divisible = false;
                for(int i = 9; i >= 2; i--){
                    if(result % i == 0){
                        digits[count++] = i;
                        divisible = true;
                        if(result / i == 1)
                            finish = true;
                        else
                            result = result / i;
                        break;
                    }
                }
                if(!divisible || finish)
                    break;
            }
            if(!divisible)
                cout << -1 << endl;
            else{
                for(int i = count - 1; i >= 0; i--)
                    cout << digits[i];
                cout << endl;
            }
        }
    }
}  

1370: 题意很简单,就是分蛋糕问题,解题思路也很简单。

首先用蛋糕总数除以N,如果不能整除就输出-1

如果能整除,就遍历输入的N个数,如果一个数比N小,则这个数和N的差就是这个数要达到平均值时需要移动的次数,统计所有比N小的数移动的次数,就得到了总次数。

最后注意,题中输入数字的数组必须足够大,经过实践证明,如果数组开为100大小,那么HOJ会报Runtime Error (SIGSEGV)错误,如果开为1000,会WA,开到10000,就AC了。

代码如下:

#include <iostream>
using namespace std;

int main(){
    int N, nums[10000], sum, result;
    while(cin >> N && N != -1){
        sum = 0;
        for(int i = 0; i < N; i++){
            cin >> nums[i];
            sum += nums[i];
        }
        if(sum % N != 0)
            result = -1;
        else{
            sum = sum / N;
            result = 0;
            for(int i = 0; i < N; i++){
                if(nums[i] < sum)
                    result += sum - nums[i];
            }
        }
        cout << result << endl;
    }
}