2018春招笔试大数据方向C++题解
编程题1:
1.给予一个数字n(n≤1000000),然后输入n个数据(1≤数据≤1000000),寻找N个数中唯一一个不同的数字,返回该数字的位置,
思路:一开始想设个1000000大小的数组,然后发现数组太大了... ̄□ ̄||
突然就想到可以在输入数据的时候就进行比较,为了发现不同的两个数字中哪个是正常的数字,所以需要读入第三个数据,需要的数组大小为3,方便起见我就直接设为10了。
基本思路是当 i != i-1时,读入下一个元素并记录下一个 i 到sign中,然后分情况讨论输出 i 或 i -1 或 i - 2,其中 i 的情况是不同的数位于末尾,i -1的情况读入的第三个数与第二个数不同,i - 2的情况是读入的第三个数与第二个数相同
#include <iostream> using namespace std; int main() { int n; cin >> n; int w[10]; int sign = 0, flag = 0; for (int i = 1; i <= n; i++) { cin >> w[i%3]; sign = i; if (flag == 1) break; if ((w[i%3] != w[(i-1)%3])&(i>1)) flag=1; } if ((sign == n)&(w[sign % 3] != w[(sign - 1) % 3])) { cout << sign; } else if (w[sign%3] == w[(sign-1)%3]) { cout << sign-2; } else cout << sign - 1; }
编程题2
有三个整数X,Y,Z,要求进行若干次操作使X,Y,Z相等,操作有两种
1.从X,Y,Z中选择两个数都加1
1.从X,Y,Z中选择两个数都加1
2.从X,Y,Z中选择一个数加2
求最少需要多少次操作
思路:我把三个数按从大到小的排序,方便后来的计算,a是最大的数,b和c有两种情况,相差为奇数时可以通过(b-c)/2次操作变成b,b-1,然后只要a-b+2次操作就能得到相等,相差为偶数时通过(b-c)/2次操作变成b,b,然后再a-b次操作就相等了
#include <iostream> using namespace std; void change(int *a, int *b) { int m; if (*a < *b) { m = *a; *a = *b; *b = m; } } int main() { int a, b, c; cin >> a >> b >> c; change(&a, &b); change(&a, &c); change(&b, &c); int i = 0; if (b == c) { cout << a - b; } else if ((b - c)%2== 1) { cout << a - b + 2+(b-c)/2; } else if ((b - c) % 2 == 0) { cout << (b - c) / 2 + a - b; } return 0; }大三狗第一次做笔试,选择题大半都不会,编程走了大半天弯路才回来,不知道两个AC能不能进面试 ̄□ ̄||#春招##C/C++##笔试题目#