感染者转运问题
一个小区里有n个居民,第一天有k个传染病感染者,感染者需要转运到医院隔离和治疗,该小区第一天的转运 感染者的能力是p个人,第二天转运能力是p-1人,第三天转运能力是p-2人,以此类推。如果感染者当天没有转运出小区,则每一个感染者会在当天午夜12点感染1个人。请问这个小区需要多少天感染者能清零。用Java/ JS/TS/c++语言实现求清零天数函数。 要求:
(1)命名一个合适的函数名称,实现完整的函数
(2)按照你平时的编程习惯,在你认为需要注释处写上相应的注释
(3)代码行数尽可能少,代码运行复杂度尽可能小
(4)写出你实现代码的算法复杂度o(n)
public class Solution {
// p-x+1为当天转运能力, f(x)为当天感染人数,x从1开始
// f(1) 为k
// f(x+1) = 2 * (f(x)-(p-x+1))
public int calculate(int k, int p, int n) throws Exception {
int infectus = k;
int t = 1;
while (t >= 1) {
int deliver = p - t +1;
// 边界条件1 转运能力小于0,不能清零
if (deliver <=0 ) {
throw new Exception("无法清零");
}
// 边界条件2 感染人数大于居民
deliver = deliver > n ? n : deliver;
infectus = 2 * (infectus - deliver);
t += 1;
// 转运能力大于感染人数的情况
if (infectus <= 0) {
break;
}
}
return t;
}
public static void main(String[] args) {
int k = 30;
int p = 5; //5,16
int n = 500;
Solution s = new Solution();
try {
System.out.println(s.calculate(k,p,n));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
计算器跳过4的问题
原题:程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。
你能根据计费表的数字,计算出实际的数字吗?
示例1、input 5 output 4
示例2、input 17 output 15
示例3、input 100 output 81
示例4、input 500 output 324
import java.util.Scanner;
public class test01 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int num = in.nextInt();
int count = 0;
for (int i = 0; i <= num; i++) {
String temp = i + "";
if (temp.contains("4")) {
count += 1;
}
}
System.out.println(num - count);
}
}
}
学校组织活动,将学生排成一个矩形方针,请在矩形方阵中找到最大的位置相连的男生数量,这个相连位置在一个直线上,方向可以是水平的、垂直的、呈对角线的或者反对角线的。
注:学生个数不会超过10000.
输入描述:第一行为矩阵的行数和列数,接下来的n行为矩阵元素,元素间用","分隔
输出:一个整数
输入“:
3,4
F,M,M,F
F,M,M,F
F,F,F,M
输出:
3