Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式.小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行.
请你直接提交这个整数,千万不要填写任何多余的内容.
//蓝白蓝白
//第21行到第50行 有几行蓝色
public class 隔行变色 {
public static void main(String[] args) {
int h = 0;
for(int i = 21; i <= 50; i++ ) {
if(i % 2 != 0) {
h++;
}
}
System.out.println(h);
}
}
B.立方尾不变
有些数字的立方的末尾正好是该数字本身.比如: 1,4,5,6,9,24,25....
请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个.
请提交该整数,不要填写任何多余的内容.
//import java.util.Scanner;
//public class 立方尾不变 {
/* public static void main(String[] args) {
int count=0;
for (int i = 1; i <= 10000; i++) {
if(i<10){
if((i*i*i)%10==i){
count++;
}
}else if(i<100){
if((i*i*i)%100==i){
count++;
}
}else if(i<1000){
if((i*i*i)%1000==i){
count++;
}
}else if(i<10000){
if((i*i*i)%10000==i){
count++;
}
}
}
System.out.println(count);
}*/
import java.math.BigInteger;
public class 立方尾不变 {
public static void main(String[] args) {
int count=0;
for(int i=1;i<=10000;i++) {
String str=String.valueOf(i);
double b=Math.pow(10,str.length());
int a=(int) ((((i * i) % b)* i)% b);
// int a=(int) ((i*i*i)%b); //精度缺失
if(i==a) {
count++;
}
}
System.out.println(count); //36
}
}
C.无穷分数
无穷的分数,有时会趋向于固定的数字.
请计算【图 1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0.
请填写该浮点数,不能填写任何多余的内容.
参考代码
public class 无穷分数 {
public static void main(String[] args) {
System.out.printf("%.5f",f(1));
}
public static double f(int n){
if (n==999999){
return 1;
}
return n/(n+f(n+1));
}
}
D.循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节.比如,11/13=6=>0.846153846153..其循环节为[846153]共有6位.下面的方法,可以求出循环节的长度.
import java.util.*;
public class Main
{
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){
return v.size()-v.indexOf(n);
};
}
}
public static void main(String[] args)
{
System.out.println(f(1, 8));
System.out.println(f(8, 3));
System.out.println(f(11, 13));
System.out.println(f(39, 190));
}
}
E.格子中输出
stringInGrid方法会在一个指定大小的格子中打印指定的字符串.要求字符串在水平、垂直两个方向上都居中.
如果字符串太长,就截断.
如果不能恰好居中,可以稍稍偏左或者偏上一点.
参考代码
public class Main {
public static void main(String[] args) {
stringInGrid(20, 6, "abcd1234");
}
public static void stringInGrid(int width, int height, String s)
{
if(s.length()>width-2) s = s.substring(0,width-2);
System.out.print("+");
for(int i=0;i
F.奇妙的数字
小明发现了一个奇妙的数字.它的平方和立方正好把0~9的10个数字每个用且只用了一次.你能猜出这个数字是多少吗?
import java.util.*;
public class Main {
public static void main(String[] args) {
for (int i = 1;i<100 ; i++) {
int a=i*i;
int b=i*i*i;
String cString=a+""+b;
if (Jc(cString)) {
System.out.println(i);
break;
}
}
}
public static boolean Jc(String num) {
char[] clist=num.toCharArray();
Arrays.sort(clist);
num=String.valueOf(clist);
if (num.equals("0123456789")) {
return true;
}
return false;
}
}
G.加法变乘法
我们都知道:1+2+3+ ...+ 49= 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+..+49= 2015就是符合要求的答案.
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10).
注意:需要你提交的是一个整数,不要填写任何多余的内容.
public static void main(String [] args) {
for(int i=1; i<=49; i++) {
int a = i;
for(int j=i+2 ; j<=49; j++) {
int b = j;
if(a*a-a+b*b-b==792 && a!=10) {
System.out.println(a);
}
}
}
}
H.移动距离
星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3...当排满一行时,从下一行相邻的楼往反方向排号.
比如:当小区排号宽度为6时,开始情形如下:
12 3 4 5 6
1211 109 8 713 14 15......
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数w m n,空格分开,都在1到10000范围内要求输出一个整数,表示m n两楼间最短移动距离.
例如:
用户输入:6 8 2
则,程序应该输出:4
//w 号码间的宽度
import java.util.Scanner;
public class 移动距离 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int w=sc.nextInt();
int m=sc.nextInt();
int n=sc.nextInt();
int a=m / w;
int b=m % w;if(b==0)a-=1;
if(a%2==0)b-=1;
if(a%2==1)b=w-b;
int a1=n/w;
int b1=n%w;if(b1==0)a1-=1;
if(a1%2==0)b1-=1;
if(a1%2==1)b1=w-b1;
int a3=a1-a;
if(a3<0)a3=-a3;
int b3=b1-b;
if(b3<0)b3=-b3;
System.out.println(a3+b3);}
}
I.打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度.为了便于比对空格,所有的空白位置都以句点符来代替.
要求输入两个整数m n,表示笔的宽度,X的高度.用空格分开(O
例如,用户输入:
3 9
输出:
参考代码
import java.util.Scanner;
public class 打印大X {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
int k=n-1-m; //点数
int len=k+2*m;//列数
char[][] c=new char[n][len];
for (int i = 0; i < n; i++) {
for (int j = i; j < m+i; j++) {
c[i][j]='*';
}
int j = len-1-i;
for (int l = 0; l < m; l++,j--) {
c[i][j]='*';
}
}
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c[0].length; j++) {
if (c[i][j]!='*'){
c[i][j]='.';
}
}
}
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c[0].length; j++) {
System.out.print(c[i][j]);
}
System.out.println();
}
}
}
J.垒骰子
参考代码
import java.util.Scanner;
public class Main{
private static int n,m; private static final long MOD = 1000000007;
private static int[] op = new int[7];
private static void init(){
op[1] = 4;
op[2] = 5;
op[3] = 6;
op[4] = 1;
op[5] = 2;
op[6] = 3;
}
public static void main(String[] args){
init();
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
long conflict[][] = new long[6][6];
for(int i = 0; i < 6; i++){
for(int j = 0; j < 6; j++){
conflict[i][j]=1;
}
}
//建立冲突矩阵
for(int i = 0; i < m; i++){
int a = sc.nextInt();
int b = sc.nextInt();
conflict[op[a]-1][b-1]=0;
conflict[op[b]-1][a-1]=0;
}
//求冲突矩阵的n-1次方
long[][] mPow_n_1 = mPow(conflict,n-1);
//累加矩阵的每个元素
long res = 0;
for(int i = 0; i < 6; i++){
for(int j = 0; j < 6; j++){
res = (res + mPow_n_1[i][j])%MOD;
}
}
//res*4的n次方
System.out.println(res*power(4,n)%MOD);
}
private static long power(long i,int n){
long ans = 1;
while(n!=0){
if((n&1)==1){
ans = (ans*i)%MOD;
}
i = (i*i)%MOD;
n>>=1;
}
return ans;
}
/**
*矩阵的快速幂
*/
private static long[][] mPow(long[][] conflict, int n){
long[][] e = new long[6][6];
for(int i = 0; i < 6; i++){
for(int j = 0; j < 6; j++){
if(i == j){
e[i][j] = 1;
}else {
e[i][j] = 0;
}
}
}
while(n!=0){
if((n&1)==1){
e = mMul(e,conflict);
}
conflict = mMul(conflict,conflict);
n>>=1;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)