蓝桥杯备赛第八天

1.问题描述

  话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上(审题错误不是每t米休息s秒而是达到这个条件后才休息),它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。

  然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。

输入格式

  输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)

输出格式

  输出包含两行,第一行输出比赛结果——一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

  第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。

样例输入

10 5 5 2 20

样例输出

D

4

样例输入

10 5 5 1 20

样例输出

R

3

样例输入

10 5 5 3 20

样例输出

T

4

version1

/**

* Copyright (C), 2015-2019

* FileName: Race

* Author: zun

* Date: 2019/2/19 16:55

* Description: 龟兔赛跑预测

* History:

* <author> <time> <version> <desc>

* 作者姓名 修改时间 版本号 描述

*/



import java.util.Scanner;



/**

* 〈一句话功能简述〉

* 〈龟兔赛跑预测〉

*

* @author zun

* @create 2019/2/19

* @since 1.0.0

*/

public class Race {

public static void main(String[] args){

Scanner in=new Scanner(System.in);

int v1=in.nextInt();

int v2=in.nextInt();

int t=in.nextInt();

int s=in.nextInt();

int l=in.nextInt();

int r_time=0;

int t_time=l/v2;

int r_l=0,t_l=0;

while(r_l!=l){



if(r_l>t_l){

t_l=t_l+(r_l-t_l)/t*s*v2;

r_time+=s;

}

else {

r_l=r_l+v1;

t_l=t_l+v2;

r_time++;



}}

if(r_time>t_time){

System.out.println("T"+"\n"+t_time);



}

else if(r_time<t_time){

System.out.println("R"+"\n"+r_time);



}

else {

System.out.println("D"+"\n"+r_time);

}

}







}

运行超时

/**

* Copyright (C), 2015-2019

* FileName: Race

* Author: zun

* Date: 2019/2/19 16:55

* Description: 龟兔赛跑预测

* History:

* <author> <time> <version> <desc>

* 作者姓名 修改时间 版本号 描述

*/



import java.util.Scanner;



/**

* 〈一句话功能简述〉

* 〈龟兔赛跑预测〉

*

* @author zun

* @create 2019/2/19

* @since 1.0.0

*/

public class Race {

public static void main(String[] args){

Scanner in=new Scanner(System.in);

int v1=in.nextInt();

int v2=in.nextInt();

int t=in.nextInt();

int s=in.nextInt();

int l=in.nextInt();

int r_time=0;

int t_time=l/v2;

int r_l=0,t_l=0;

while(r_l!=l){

if(r_l-t_l>=t){

t_l=t_l+s*v2;

r_time+=s;

}

else{



r_l=r_l+v1;

t_l=t_l+v2;

r_time++;}



}

if(r_time>t_time){

System.out.println("T"+"\n"+t_time);



}

else if(r_time<t_time){

System.out.println("R"+"\n"+r_time);



}

else {

System.out.println("D"+"\n"+r_time);

}

}







}

  

2.有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多。

  每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。

  给出所有芯片的测试结果,问哪些芯片是好芯片。

输入格式

  输入数据第一行为一个整数n,表示芯片个数。

  第二行到第n+1行为n*n的一张表,每行n个数据。表中的每个数据为0或1,在这n行中的第i行第j列(1≤i, j≤n)的数据表示用第i块芯片测试第j块芯片时得到的测试结果,1表示好,0表示坏,i=j时一律为1(并不表示该芯片对本身的测试结果。芯片不能对本身进行测试)。

输出格式

  按从小到大的顺序输出所有好芯片的编号

样例输入

3

1 0 1

0 1 0

1 0 1

样例输出

1 3

/**

* Copyright (C), 2015-2019

* FileName: ClipsTest

* Author: zun

* Date: 2019/2/19 18:26

* Description: 芯片测试

* History:

* <author> <time> <version> <desc>

* 作者姓名 修改时间 版本号 描述

*/



import java.util.Scanner;



/**

* 〈一句话功能简述〉

* 〈芯片测试〉

*

* @author zun

* @create 2019/2/19

* @since 1.0.0

*/

public class ClipsTest {

public static void main(String[] args){

Scanner input=new Scanner(System.in);

int n=input.nextInt();

int[][] num=new int[n][n];

for(int i=0;i<n;i++){

for(int j=0;j<n;j++){

if(j==0)

{

int t=input.nextInt();

if(t==1){

System.out.print(i+1+" ");

}

}





}}}}

思路 第一列所有为1的芯片就是好芯片

 

3.问题描述

  FJ在沙盘上写了这样一些字符串:

  A1 = “A”

  A2 = “ABA”

  A3 = “ABACABA”

  A4 = “ABACABADABACABA”

  … …

  你能找出其中的规律并写所有的数列AN吗?

输入格式

  仅有一个数:N ≤ 26。

输出格式

  请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入

3

样例输出

ABACABA

思路:

3-c

然后两边关于c对称

使用递归算法

/**

* Copyright (C), 2015-2019

* FileName: FJString

* Author: zun

* Date: 2019/2/19 18:36

* Description: fj字符串 找规律

* History:

* <author> <time> <version> <desc>

* 作者姓名 修改时间 版本号 描述

*/



import java.util.Scanner;



/**

* 〈一句话功能简述〉

* 〈fj字符串 找规律〉

*

* @author zun

* @create 2019/2/19

* @since 1.0.0

*/

public class FJString {

public static String getString(int n){

if(n==1){

return "A";

}

else {





String str = getString(n - 1) + (char) ('A' + n-1) + getString(n - 1);



return str;}

}



public static void main(String[] args){

Scanner s=new Scanner(System.in);

int n=s.nextInt();

System.out.println(getString(n));

}





}

  最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。

  不妨设

  An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)

  Sn=(...(A1+n)A2+n-1)A3+...+2)An+1

  FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。

输入格式

  仅有一个数:N<201。

输出格式

  请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入

3

样例输出

/**

* Copyright (C), 2015-2019

* FileName: Sine

* Author: zun

* Date: 2019/2/19 18:58

* Description: Sine之舞

* History:

* <author> <time> <version> <desc>

* 作者姓名 修改时间 版本号 描述

*/



import java.util.Scanner;



/**

* 〈一句话功能简述〉

* 〈Sine之舞〉

*

* @author zun

* @create 2019/2/19

* @since 1.0.0

*/

public class Sine {





static int n;



public static void An(int N,int t)

{

if (N == t)

{

System.out.printf("sin(%d)",N);

return ;

}



System.out.printf("sin(%d",N);

if (N < t)

{

if (N%2==0)

{

System.out.printf(" - ");

}

else

{

System.out.printf("+");

}

An(N+1,t);

}

System.out.printf(")");

}



public static void Sn(int N,int t)

{

if (N > 1)

{

System.out.printf("(");

Sn(N-1,t+1);

}

An(1,N);

System.out.printf("+%d",t);

if (N!=n){





System.out.printf(")");}

}







public static void main(String[] args){

Scanner s= new Scanner(System.in);

n=s.nextInt();

Sn(n,1);



}



}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值