练习Day——14

芯片测试

题目描述
有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

题目解析
假设当前芯片是好的,那么用好的芯片测试当前芯片的到的结果是好的,用坏的芯片测试当前芯片得到的结果有可能是好的也有可能是坏的。又因为好的芯片的数量一定大于坏的芯片的数量(x>n/2),所以如果当前芯片真的是好的,那么用其他的芯片包括他自己来测试当前芯片,得到的结果正确的数量(测出当前芯片是好的)一定是大于n/2

import java.util.Scanner;

//芯片测试

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int num[][]=new int[n][n];
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				num[i][j]=scan.nextInt();
			}
		}
		scan.close();
		
		//假设当前芯片是好芯片
		for(int i=0;i<n;i++) {
			int count=0;//用来记录测出当前芯片是好芯片的个数
			for(int j=0;j<n;j++) {
				if(num[j][i]==1) {
					count++;
				}
			}
			if(count>n/2) {
				System.out.print(i+1+" ");
			}
		}
	}
}

Sine之舞(BASIC-21)

(这题真是普及题????我特别特别迷这道题)
题目描述
最近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

样例输出
((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1

import java.util.Scanner;
//sine之舞
//An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
//Sn=(...(A1+n)A2+n-1)A3+...+2)An+1

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		scan.close();
		StringBuffer str=S(n,n);
		System.out.println(str);
	}

	private static StringBuffer S(int n,int m) {
		StringBuffer str=new StringBuffer();
		if(n==1)
			str.append(AA(1)).append("+"+(m));
		else
			str.append("(").append(S(n-1,m)).append(")").append(AA(n)).append("+"+(m-n+1));
		return str;
	}

	private static StringBuffer A(int n) {
		StringBuffer str=new StringBuffer();
		if(n==1)
			str.append("sin(1");
		else
			str.append(A(n-1)).append(n%2==1?"+":"-").append("sin("+n);
		return str;
	}
	
	private static StringBuffer AA(int n) {
		StringBuffer str=A(n);
		while(n>0) {
			str.append(")");
			n--;
		}
		return str;
	}

}

求先序排列

题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度< =8)。

输入
两行,每行一个字符串,分别表示中序和后序排列

输出
一个字符串,表示所求先序排列

样例输入
BADC
BDCA

样例输出
ABCD

题目解析
先序遍历:根左右
中序遍历:左根右
后序遍历:左右根
先根据后序遍历结果,字符串的最后一位即为树的根节点,然后依次遍历左子树、右子树

import java.util.Scanner;

//求先序排列
public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		String in=scan.next();//中序
		String post=scan.next();//后序
		scan.close();
		
		func(in,post);
	}

	private static void func(String in, String post) {
		char root=post.charAt(post.length()-1);//找到根节点
		System.out.print(root);
		int index=in.indexOf(root);//根据根节点的位置找到左子树和右子树
		if(index>0) {
			String str1=in.substring(0, index);
			String str2=post.substring(0,index);
			func(str1,str2);
		}
		if(index<post.length()-1) {
			String str3=in.substring(index+1);
			String str4=post.substring(index, post.length()-1);
			func(str3,str4);
		}
	}
	

}

FBI树

题目描述
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1)T的根结点为R,其类型与串S的类型相同;
2)若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。

数据规模和约定
对于全部的数据,N < = 10。
注:
[1] 二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。
[2] 后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。

输入
第一行是一个整数N(0 < = N < = 10),第二行是一个长度为2N的“01”串。

输出
包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

样例输入
3
10001011

样例输出
IBFBBBFIBFIIIFF

题目解析
把串S分为两部分,以中点为界,分为0 ~ s.length/2和s.length/2 ~ s.length两部分(分成左右子树两部分),这两部分分别进行递归处理;当串长度仅为1时(即只剩下一个叶子节点),判断如果该字符是1或0则返回I或B。然后对比两个部分返回的字符(左右子树包含的字符),如果相同,则说明返回的都是1或都是0,则最后直接返回I或B即可;如果不相同,则证明返回的既含0又含1,则最后返回F。

import java.util.Arrays;
import java.util.Scanner;

//FBI树
public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();//长度为2n
		String s=scan.next();
		scan.close();
		
		char ch[]=s.toCharArray();
		func(ch);
		
	}

	private static String func(char ch[]) {
		if(ch.length==1) {
			if(ch[0]=='1') {
				System.out.print("I");
				return "I";
			}
			else if(ch[0]=='0') {
				System.out.print("B");
				return "B";
			}
		}
			char ch1[]=Arrays.copyOfRange(ch, 0, ch.length/2);
			char ch2[]=Arrays.copyOfRange(ch, ch.length/2, ch.length);
			String str1=func(ch1);
			String str2=func(ch2);
			if(str1==str2) {
				System.out.print(str1);
				return str1;
			}
				
			else {
				System.out.print("F");
				return "F";
			}
		
	}

}

一元三次方程求解

题目描述
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值> =1。要求三个实根。

数据规模和约定
|a|,|b|,|c|,|d|< =20

输入
四个实数:a,b,c,d

输出
由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位

样例输入
1 -5 -4 20

样例输出
-2.00 2.00 5.00

import java.util.Scanner;

//一元三次方程求解
public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		double a=scan.nextDouble();
		double b=scan.nextDouble();
		double c=scan.nextDouble();
		double d=scan.nextDouble();
		scan.close();
		for(double i=-100;i<=100;i+=0.01) {
			if(Math.abs(a*i*i*i+b*i*i+c*i+d)<=0.0000001)
				System.out.printf("%.2f ", i);
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery是一种流行的JavaScript库,它可以简化编写JavaScript代码的过程。在这里,我将向你介绍如何使用jQuery创建一个简单的日历插件。 首先,我们需要在HTML文件中引入jQuery库和我们自己的脚本文件: ```html <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="calendar.js"></script> ``` 接下来,我们需要在HTML文件中创建一个空的`<div>`元素,用于容纳我们的日历: ```html <div id="calendar"></div> ``` 现在,我们已经准备好开始编写JavaScript代码了。在我们的脚本文件中,我们将定义一个名为`Calendar`的对象,该对象将具有以下属性和方法: ```javascript var Calendar = { // 初始化日历 init: function(selector) { // ... }, // 绘制日历 draw: function(year, month) { // ... }, // 获取指定月份的天数 getDaysInMonth: function(year, month) { // ... }, // 获取指定月份的第一天是星期几 getFirstDayOfWeek: function(year, month) { // ... } }; ``` 现在,我们来看看这个对象的实现细节。首先是初始化方法: ```javascript init: function(selector) { var now = new Date(); var year = now.getFullYear(); var month = now.getMonth() + 1; $(selector).data('year', year); $(selector).data('month', month); this.draw(year, month); } ``` 在这里,我们获取当前的年份和月份,然后将它们存储在`<div>`元素的数据属性中。然后,我们调用`draw`方法来绘制日历。 接下来是绘制方法: ```javascript draw: function(year, month) { var daysInMonth = this.getDaysInMonth(year, month); var firstDayOfWeek = this.getFirstDayOfWeek(year, month); var html = '<table>'; html += '<tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>'; var day = 1; for (var i = 0; i < 6; i++) { html += '<tr>'; for (var j = 0; j < 7; j++) { if (i === 0 && j < firstDayOfWeek) { html += '<td></td>'; } else if (day > daysInMonth) { html += '<td></td>'; } else { html += '<td>' + day + '</td>'; day++; } } html += '</tr>'; if (day > daysInMonth) { break; } } html += '</table>'; var selector = '#calendar'; $(selector).html(html); } ``` 在这里,我们首先获取指定月份的天数和该月份的第一天是星期几。然后,我们使用一个表格来绘制日历。我们遍历6行和7列,并根据当前日期填充单元格。如果日期超出了该月份的天数,我们就停止绘制。 最后,我们将HTML代码插入到`<div>`元素中。 最后是获取指定月份的天数和第一天是星期几的方法: ```javascript getDaysInMonth: function(year, month) { return new Date(year, month, 0).getDate(); }, getFirstDayOfWeek: function(year, month) { return new Date(year, month - 1, 1).getDay(); } ``` 这些方法分别使用JavaScript的`Date`对象来计算指定月份的天数和第一天是星期几。 现在,我们已经完成了一个简单的日历插件的开发。你可以在HTML文件中使用以下代码来初始化日历: ```javascript $(document).ready(function() { Calendar.init('#calendar'); }); ``` 当然,你还可以根据自己的需要对插件进行扩展和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值