华为机考,华为笔试,20200715
程序员文章站
2022-07-13 14:20:36
...
/* 华为机考7.15第一题:(约用时5分钟完成)
输入两个数,n,m(范围很大,应该超过了整形范围,建议用字符串)
两个数各个位之和,相除求余数;
例如:输入 123 24
1+2+3=6,2+4=6;
6%6=0;
因此输出为:0 */
#include<iostream>
#include<string>
using namespace std;
int main()
{
string n, m;
cin >> n >> m;
int len1 = n.size();
int len2 = m.size();
int sum1 = 0, sum2 = 0;
for (int i = 0; i < len1;i++)
sum1 = sum1 + (n[i] - '0');
for (int i = 0; i < len2;i++)
sum2 = sum2 + (m[i] - '0');
int res = sum1 % sum2;
cout << res;
return 0;
}
/* 华为机考7.15第二题(约用时20分钟完成)
食堂有5种价格的食品,价格分别为1,3,7,11,13元;
每种食品有i1,i2,i3,i4,i5件,假设有x元,问最少可以买几件食品;
输入:第一行,每种食品数量
第二行:有多少钱;
输出:最少件数
例如: 输入:1 2 3 4 5
30
输出:4 */
//分析:穷举,简单容易想到,好写,但是直接穷举会超时,在找到第一个总价钱和为x的数时直接结束掉就不超时了。
//因为循环时小价格外层循环,大价格内层循环,因此找到的第一个解是有较多价格高的食品,较少价格低的食品,数量应该是最少的。
#include<iostream>
using namespace std;
int main()
{
int a0[5];
int x0;
for (int i = 0; i < 5;i++)
{
cin >> a0[i];
}
cin >> x0;
int min0 = 10000;
int sum0 = 0;
for (int i1 = 0; i1 <= a0[0];i1++)
{
for (int i2 = 0; i2 <= a0[1];i2++)
{
for (int i3 = 0; i3 <= a0[2];i3++)
{
for (int i4 = 0; i4 <= a0[3];i4++)
{
for (int i5 = 0; i5 <= a0[4];i5++)
{
sum0 = i1 + 3 * i2 + 7 * i3 + 11 * i4 + 13 * i5;
if(sum0==x0)
{
int num0 = i1 + i2 + i3 + i4 + i5;
if(num0<min0)
min0 = num0;
cout << min0;
return 0;
}
}
}
}
}
}
}
/* 华为机考7.15第三题(用时一个半小时未通过)
有一些1m的绳子和一些2m的绳子,想要凑成4m的绳子,则有
1+1+1+1,1+1+2,2+2三种方法。
输入:一行数据,第一个为要凑成的长度m,后面a1,a2......an为已有的一些绳子(n未知)
输出:多少种凑成m米绳子的方式
例如: 输入:4 1 2
输出:3 */
//首先这道题是输入的一行数据,不知道有多少个元素,因此首先读入一行字符串。
//然后根据空格的数目可以确定有多少种长度的绳子(n的大小)。
//接下来估计要使用动态规划的方法或者穷举,但是由于n是动态未知的,动态规划也学的不够扎实,没能解出来。
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int getres(int *d0,int *c0,int N0,int m)
{
int sum0 = 0;
for (int i = 0; i < N0;i++)
{
sum0 = sum0 + d0[i] * c0[i];
}
if(sum0==m)
return 1;
else
return 0;
}
int main()
{
string s0;
getline(cin, s0);
int len0 = s0.size();
int N0 = 0;
for (int i = 0; i < len0;i++)
{
if(s0[i]==' ')
N0++;
}
int c0[N0];
int m;
int j1 = 0, j2 = 0;
for (j2 = 0; j2 < len0;j2++)
{
if(s0[j2]==' ')
{
string m0 = s0.substr(j1, j2 - j1);
stringstream ss0(m0);
ss0 >> m;
break;
}
}
j1 = j2+1;
int beg0 = j1;
int i0 = 0;
for (j2 = beg0; j2 < len0;j2++)
{
if(s0[j2]==' ')
{
string css = s0.substr(j1, j2 - j1);
stringstream ssc0(css);
ssc0 >> c0[i0];
i0++;
j1 = j2 + 1;
}
}
string css = s0.substr(j1, j2 - j1);
stringstream ssc0(css);
ssc0 >> c0[i0];
for (int i = 0; i < N0;i++)
cout << c0[i] << endl;
//上面为输入处理,目前已完成,总长度m,使用c0[0]到c0[N0-1]总共N0种长度的绳子凑。后面怎么处理就不会了,等过两天想到了解法再更新。
return 0;
}
上一篇: 华为笔试-简单密码
下一篇: 生成EXCEL的公共方法(使用模板)