昨天到的学校,今天去接了豆豆,这个学期就算正式开学了。明天准备去找一下黄老师,弄一下毕业设计的事,可是芯片的相关内容还是没看什么,总感觉没法交差,关键是网上全是英文资料啊,怨念ing。。。
不过C语言感觉有了很大进步,《C Primer Plus》看了300页,虽然笔记没了,但是心里有底了。
今天还是没闲下来,延续寒假的节奏,刷了两道水题。
~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~
1365
: 这道题就是给一个数N
,求一个多位数使其各位上的数字乘积等于N
。
注意一下如果N
为0
,则输出10
,如果N
为1
到9
,那么就输入N
。
其他的,就一直循环用9
到2
除,大的数字放在低位,当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;
}
}