您的位置:首页 > 编程语言 > Java开发

第六届蓝桥杯省赛(java)C组试题及参考答案

2016-05-03 15:44 561 查看
一、题目

隔行变色 Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。

小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,….

现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。 请你直接提交这个整数,千万不要填写任何多余的内容。

参考答案:

public class Question1 {

public static void main(String[] args) {
int count=0;
for(int i=21;i<=50;i++){
if(i%2!=0) count++;
}
System.out.println(count);
}
}


二、题目

立方尾不变

有些数字的立方的末尾正好是该数字本身。 比如:1,4,5,6,9,24,25,….

请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。

请提交该整数,不要填写任何多余的内容。

参考答案:

public class Question2 {

public static void main(String[] args) {
int count=0;
for(int i=1;i<10;i++){
if(i==Math.pow(i, 3)%10)
count++;
}
for(int i=10;i<100;i++){
if(i==Math.pow(i, 3)%100)
count++;
}

for(int i=100;i<1000;i++){
if(i==Math.pow(i, 3)%1000)
count++;
}
for(int i=1000;i<10000;i++){
if(i==Math.pow(i, 3)%10000)
count++;
}
System.out.println(count);
}
}


三、题目

无穷分数 无穷的分数,有时会趋向于固定的数字。

请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。

请填写该浮点数,不能填写任何多余的内容。

参考答案:

public class Question3 {

public static void main(String[] args) {
double a=f(0);
System.out.println(a);
}
public static double f(double x){
while(x<10){
x=x+1.0/(f(x+1)+x+1);
}
return 1.0/x;
}
}


四、题目

循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。 比如,11/13=6=>0.846153846153….. 其循环节为[846153] 共有6位。 下面的方法,可以求出循环节的长度。

请仔细阅读代码,并填写划线部分缺少的代码。

public class Question4 {

public static void main(String[] args) {
int n=f(11,13);
System.out.println(n);
}
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();//填空
}
}
}


五、题目

格子中输出 stringInGrid方法会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。

如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。

参考答案:

public class Question5 {

public static void main(String[] args) {
stringInGrid(20, 4, "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<width-2;i++) System.out.print("-");
System.out.println("+");

for(int k=1; k<(height-1)/2;k++){
System.out.print("|");
for(int i=0;i<width-2;i++) System.out.print(" ");
System.out.println("|");
}

System.out.print("|");

String ff = "     "+s+"     ";  //填空
System.out.print(String.format(ff,"",s,""));

System.out.println("|");

for(int k=(height-1)/2+1; k<height-1; k++){
System.out.print("|");
for(int i=0;i<width-2;i++) System.out.print(" ");
System.out.println("|");
}

System.out.print("+");
for(int i=0;i<width-2;i++) System.out.print("-");
System.out.println("+");
}
}


六、题目

奇妙的数字

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。 你能猜出这个数字是多少吗?

请填写该数字,不要填写任何多余的内容。 分析:该数的平方数位数和加上立方和位数和正好是10位,我们可以人为的排除一部分不满足条件的

参考答案:

public class Question6 {

public static void main(String[] args) {
f1();
}
//暴力破解
public static void f1(){
int s=0;
int v=0;
for(int i=40;i<100;i++){
s=(int)Math.pow(i, 2);//四位数
int a=s%10;
int b=s/10%10;
int c=s/100%10;
int d=s/1000;
v=(int)Math.pow(i, 3);//六位数
int e=v%10;
int f=v/10%10;
int g=v/100%10;
int h=v/1000%10;
int k=v/10000%10;
int m=v/100000;
if(a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=k&&a!=b&&b!=c&&b!=e&&b!=f&&b!=g&&b!=h&&b!=k&&b!=m
&&c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=k&&c!=m&&d!=e&&e!=f&&e!=g&&e!=h&&e!=k&&e!=m&&f!=h&&f!=k&&f!=m
&&f!=g&&g!=h&&h!=k&&k!=m&&m!=a&&(a+b+c+d+e+f+g+h+k+m==45))
{
System.out.println(i);
}
}
}
}


七、题目

加法变乘法

我们都知道:1+2+3+ … + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如: 1+2+3+…+10*11+12+…+27*28+29+…+49 = 2015 就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。

public class Question7 {

public static void main(String[] args) throws Exception {
//用穷举法来试探1225+a*b+e*f-a-b-e-f==2015   (b=a+1,f=e+1)
for(int i=1;i<50;i++){
for(int j=1;j<50;j++){
if((1225+i*(i+1)+j*(j+1)-i-j-(i+1)-(j+1))==2015&&i<j){
System.out.println(i+"*****"+j);
}
}
}
}
}


八、题目

移动距离

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为6时,开始情形如下:

1  2  3  4  5  6
12 11 10 9  8  7
13 14 15 16  17 18....

我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数w m n,空格分开,都在1到10000范围内
要求输出一个整数,表示m n 两楼间最短移动距离。


参考答案:

public class Question8 {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("input w:");
int w=sc.nextInt();
System.out.println("input n:");
int n=sc.nextInt();
System.out.println("input m");
int m=sc.nextInt();
int[][] a=new int[w][w];
for(int i=0;i<w;i++){
if(i==0){//第一行
for(int j=0;j<w;j++){
a[i][j]=j+1;
}
}
else if(i%2!=0){//奇数行
int t=w*i+1;
for(int j=w-1;j>=0;j--){
a[i][j]=t++;
}
}else{//偶数行(除过0)
int t=w*i+1;
for(int j=0;j<w;j++){
a[i][j]=t++;
}
}
}
//打印
for (int i = 0; i < w; i++) {
for(int j=0;j<w;j++){
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
//求最短路径
int x1=0,x2 = 0,y1=0,y2=0;
for(int i=0;i<w;i++){
for(int j=0;j<w;j++){
if(a[i][j]==n){
x1=i;
y1=j;
}
if(a[i][j]==m){
x2=i;
y2=j;
}
}
}
int distance=Math.abs((x2-x1)+(y2-y1));
System.out.println(distance);
}
}


九、题目

打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。

要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X

例如,用户输入:
3   9


程序应该输出:



再例如,用户输入:

4 21

程序应该输出



参考答案

public class Question9 {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("input n:");
int n=sc.nextInt();
System.out.println("input m:");
int m=sc.nextInt();
char[][] ch=new char
[m+n-1];
//初始化方阵
for(int i=0;i<n;i++){
for(int j=0;j<m+n-1;j++){
ch[i][j]='.';
}
}
//用“*”填充方阵
for(int i=0;i<n;i++){
for(int j=0,k=m+n-2;j<=k;j++,k--){
if(j<m)
ch[i][j+i]='*';
if(k>=n-1)
ch[i][k-i]='*';
}
}
//打印
for(int i=0;i<n;i++){
for(int j=0;j<m+n-1;j++){
System.out.print(ch[i][j]+" ");
}
System.out.println();
}
}
}


为了记住2015年5月31号在北京科技大参加蓝桥杯,所以写下此博文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: