一个小时,3道题,A出1.7道,最后一道没时间看。
题目一(100%)
/**
* 随着制造工艺的提升,蓝厂工人生产手机的效率随着时间的推移逐渐增加,第一天每天生产一部,接着的两天每天生产2部,接着的三天每天生产3部手机,以此类推
* 要求输入一个天数n,返回到那天总共生产的手机的数量。
*/
public class Solution {
/**
* @param n int整型 第n天
* @return int整型
*/
public int solution(int n) {
//产品总数
int sum = 0;
int temp = 0;
//当前日期每天能够生产的手机的数量
int phone = 1;
for (int i = 0; i < n; i++) {
if (temp == phone) {
temp = 0;
phone++;
}
temp++;
sum += phone;
}
return sum;
}
}
题目二(70%)
/**
* 现给定任意正整数n,请寻找并输出最小的正整数m(m>9),使得m的各位之乘积为n,若不存在输出-1。
*/
public class Solution {
public int solution(int n) {
//返回的结果值
int num = 0;
//数组的下标
int index = 0;
//模拟的数组
int[] m = new int[10];
//乘积结果
int res = n;
//结果的最小的位数
int weishu = 2;
int q = 9;
int s = 0;
boolean marked = false;
//通过循环计算最小的位数
while (res > 9 * q) {
weishu++;
q *= 9;
}
int r = weishu - 1;
while (weishu != 0) {
for (int j = 9; j >= 1 && !marked; j--) {
//乘积的结果
s = res;
//如果结果能被当前的数整除
if (res % j == 0) {
marked = true;
//将这个数记录在数组中
m[index++] = j;
res /= j;
}
}
if (s == res && res >= 10)
return -1;
--weishu;
marked = false;
}
//此时数组中存储着从大到小的能够整除乘积结果的数字
for (;r>=0;r--){
//将当前数组存储的结果转化为数字
num = num * 10 + m[r];
}
return num;
}
}
题目三(0%)
/**
* 现在有一个3X3的智能手机解锁程序,要求输入两个正整数m和n,计算出最少使用m和键,最多使用n个键的解锁方式。
* 1.每个模式必须连接至少m个键和最多n个键
* 2.所有的键都必须是不同的
* 3.如果在模式中连接两个连续键的行通过任何其他键,则其他键必须在模式中选择,不允许跳过非选择键。
*/