关于复试机试的所有帖子,均是我本人拿来当日记用的而不是面向大众。所以写的很简单,仅限于自己看懂。大伙勿喷。
复试机试帖1-1:暴力求解
枚举型
1.reserve函数(将一个数反转)
int reserve(int x){
int re=0;
while(x>0){
re=re*10;
re=re+x%10;
x=x/10;
}
return re;
}
ps:之前喜欢先把输入数字的位数给求出来,实际上这方法又笨又蠢。上述的代码块直接给你整出来。
刷了几道题,求反转数是经常出现的一个步骤。因此特地将他放到这里来。
-
例题:
解题思路
学过计算机的看这种题目一般不会有太大门槛。这题唯一恶心的地方是给你的测试用例。如图下:
当时我就纳闷了,咋一次性测试用例给你三个。在我印象里,每次都是指测试一组用例,给你4个数,然后你给出两个数字和对应价格。
但是这里给出的测试输入,一次性输入三组。我理解为一次性输入n组,然后答案一次性给出n组答案。但又遇到问题,谁知道你一次性输入多少组。题目又没说。
重头想了一下,应该不是一次性把答案给出来。我结合while循环,只要给了输入,我就跑一遍,然后输入一组答案,等你下一次输入,如果又输了东西,我再跑一遍,给出答案。这样我的程序永远处于等待输入状态。
所以标准的测试用例应该长这样子
个人代码:
#include<iostream>
using namespace std;
int main(){
int x=0;
int y=0;
int z=0;
int N=1;
int single_price=0;
int sum_price=0;
int a=1;
int b=0;
int sign=0;
while(cin>>N>>x>>y>>z){
sign=0;
for(a=9;a>=1;a=a-1)
{
for(b=9;b>=0;b=b-1)
{
sum_price=10000*a+1000*x+100*y+10*z+b;
if(sum_price%N==0){
cout<<a<<" "<<b<<" "<<sum_price/N<<endl;
a=-1;
sign=1;
break;
}
}
if(sign==0&&a==1)
cout<<0<<endl;
}
}
}