(1)题目:小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。
并且小Q对于能否被3整除这个性质很感兴趣
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
输入例子1:
2 5
输出例子1:
3
例子说明1:
12, 123, 1234, 12345...
其中12, 123, 12345能被3整除。
答案:转载链接:my.oschina.net/liyurong/blog/1786363
规律如下:能被3整除为0,否则为1
x=1----1------>1
x=2----12------>0
x=3-----123----->0
x=4-----1234---->1
x=5-----12345---->0
x=6-----123456---->0
x=7----1234567---->1
在区间[1,x]之间共有f(x)=(x+2)/3 个1,剩下的都满足要求,即在区间[l,r]上的r-l+1个数字中,有f(r)-f(l-1)个不满足要求。
答案:
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int l = sc.nextInt();
int r = sc.nextInt();
int count = r - l + 1 - (f(r) - f(l - 1));
System.out.println(count);
}
public static int f(int x){
return (x + 2) / 3;
}
}
运行结果:
(2)牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。
接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。
输出描述:
输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。
输入例子1:
3
LRR
输出例子1:
E
答案:
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//char a[] = {'N','E','S','W'};
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next();
int count=0;
for(int i=0;i
count--;
}else if(s.charAt(i)=='R'){
count++;
}
}
int realresult = count%4;
if(realresult<0){
realresult+=4;
}
switch (realresult) {
case 0:
System.out.println('N');
break;
case 1:
System.out.println('E');
break;
case 2:
System.out.println('S');
break;
case 3:
System.out.println('W');
break;
default:
break;
}
}
}
(3)牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。
但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。
输入描述:
输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。
输出描述:
对于每个测试用例, 输出一个正整数表示可能的数对数量。
输入例子1:
5 2
输出例子1:
7
例子说明1:
满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)
分析:
当k=0时,x除以y的余数肯定大于等于0,即有n*n个数对
当K ≠0 时,只有y>k才会产生x%y>=k。
1)完整循环
完整循环次数:n/y
在完整循环中有数对个数:(n/y)(y-k)
2)不完整循环
不完整循环次数:n%y
在不完整循环中有数对个数:Math.max(n%y-k+1,0)
答案:
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long k = sc.nextLong();
long result = 0;
if (k == 0){
result = n* n;
}else {
for (long y = k+1; y <= n; y++) {
result+=(n/y)*(y-k)+Math.max(n%y-k+1,0);
}
}
System.out.println(result);
}
}
要求,按顺时针方向输出n阶螺旋数
示例:输入正整数4;输出如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
分析:每组螺旋数每一层都是一个循环,每个循环分为四步,如下所示:
答案:
import java.util.Scanner;
/*
* 螺旋数
* 分析:每组螺旋数每一层都是一个循环,每一个循环分为四步
* */
public class Helix {
public static void main(String args[]) {
int i,j;
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int num[][]=new int[n][n];//定义二维数组中元素的个数
num=printNum(num,0,0,1,n);
for(i=0;iy;k--) {
//第三步,行不变,列-1,但不包括最左边一列。
num[j][k]=start++;
}
for(m=x+n-1;m>x;m--) {
//第四步,列不变,行+1,但不包括最上面一行。
num[m][k]=start++;
}
//下一次循环
printNum(num,x+1,y+1,start,n-2);
}
return num;
}
}
运行结果如下所示: