1.隔行变色
Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,…
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。
public class A {
public static void main(String[] args) {
int i,count=0;
for(i=1;i<=50;i++){
if(i>=21&&i%2==1){
count++;
}
}
System.out.println(count);
}
}
2.立方尾不变
有些数字的立方的末尾正好是该数字本身。
比如:1,4,5,6,9,24,25,…
请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
请提交该整数,不要填写任何多余的内容。
答题思路:
1. 首先这道题没有对时间和内存做要求,所以可以采用穷举法,当然了肯定是越简单越好。
2. 由于10000内正整数的立方是一个很大的数,所以要用long long 类型来保存。
3. 比如说25的立方为15625,这个数就满足题的要求。25是一个两位数,我们只需要取出15625的后两位,来与25比较,判断是否相等。相等满足题的要求,则记录下来。
public class A {
public static void main(String[] args) {
int count = 0;
int i;
for (i = 1; i <= 10000; i++) {
if (i < 10) {
if ((i*i*i) % 10 == i) {
//System.out.println(i+" ");
count++;
}
} else if (i < 100) {
// System.out.println("*****");
if ((i*i*i) % 100 == i){
//System.out.println(i+" ");
count++;}
} else if (i < 1000) {
//System.out.println("*****");
if ((i*i*i) % 1000 == i){
//System.out.println(i+" ");
count++;
}
} else if (i < 10000) {
if ((i*i*i) % 10000 == i){
//System.out.println(i+" ");
//System.out.println("*****");
count++;}
}
}
System.out.println(count);
}
}
3.无穷分数
无穷的分数,有时会趋向于固定的数字。
请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。
请填写该浮点数,不能填写任何多余的内容。
思路:
由题可知,一直除到最后会趋向于固定的数字,并且要保留五位小数,那么我们就可以用几个数字来试试,看看是不是会趋向于固定数字,固定数字是多少
这个式子的实现呢,可以用递归来做,也可以用循环来做,我实现的是循环
public class A{
public static void main(String[] args) {
//可以更改n来试验最后求出的固定值对不对
double n = 100;
//储存每一次计算的值
double sum = n + 2;
//倒着来算每一层的值,一直算到第一层
for (double i = n; i >= 0; i--) {
sum = i + (i + 1) / sum;
}
//格式化字符串,保留五位小数输出
System.out.println(String.format("%.5f", sum));
}
}
4.循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153… 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。
请仔细阅读代码,并填写划线部分缺少的代码。
public static int f(int n, int m)
{
n = n % m;
Vector v = new Vector();
for(;;)
{
v.add(n);
n *= 10;
n = n % m;
if(n==0) return 0;
if(v.indexOf(n)>=0) _________________________________ ; //填空
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
思路:
vector其实和数组一样,所有元素都保存在从数组下标为0的地方开始,连续保存,只是数组下标不能越界,而vector下标可动态变化。
vector.indexOf(int n);
看能否在vector数组中找到n的值,若能找到则返回0,若找不到则返回-1;
import java.util.Vector;
public class A {
public static int f(int n, int m) {
n = n % m;
Vector<Integer> v = new Vector<Integer>();
for(; ;) {
v.add(n);
n *= 10;
n = n % m;
if(n == 0) {
return 0;
}
if(v.indexOf(n) >= 0) {
return v.size();
}
}
}
public static void main(String[] args) {