蓝桥杯3月7日练题

"本文介绍了两个编程挑战,一个是构建数学函数"Sine之舞"的表达式,另一个是通过芯片测试结果识别好芯片。在Sine之舞问题中,通过递归和循环构建An和Sn函数来生成表达式。而在芯片测试问题中,利用多数投票原则,当其他芯片对某芯片的正向判断超过一半时,认定该芯片为好芯片。这两个问题都涉及到了算法设计和实现,适合提升编程思维和问题解决能力。"
摘要由CSDN通过智能技术生成

试题 基础练习 Sine之舞

问题描述

最近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

**思路:**分别构造An和Sn函数,An采用递归思想构建,找出其中的规律。Sn采用循环,注意括号匹配

import java.util.Scanner;

public class Main {
    static Scanner scanner=new Scanner(System.in);
    static int N;
    static String anString;
    static String An(int n,String s,int i) {  //递归解决An
        if(i==n) {
            return s;
        }
        s=s+"sin(" + (i+1);
        if(i+1!=n) {
            if(i%2==1) {
                s+="+";
            }else {
                s+="-";
            }
        }else {
            s+=")";
        }
        return An(n,s,++i);
    }
    static void Sn(int n) {   //循环解决Sn
        int i,j,k;
        if(n==0) {
            return ;
        }
        for(k=1;k<n;k++) {  //打印前半部分括号
            System.out.print("(");
        }
        k=1;
        i=1;
        while((n)!=0) {
            System.out.print(An(k, "", 0));
            for(j=1;j<i;j++) {
                System.out.print(")"); 
            }
            System.out.print("+"+n);
            if(n!=1) {
                System.out.print(")");
            }
            k++;
            i++;
            n--;
        }

    }
    public static void main(String[] args) {
        N=scanner.nextInt();
        Sn(N);
    }
}

试题 基础练习 芯片测试

问题描述

有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

**思路:**关键的解题核心,只要其他的芯片对一个芯片的判断结果是1的个数大于0的个数 就可以判断这个是一个好芯片。为什么呢?因为题目中说了, 其中坏的芯片的判断是随即的要不是1要不是0,所以对一个好的芯片(被检测)的判断而言, 用坏的去判断(检测方)这个好的,显示1和显示0的概率都是50%, 而如果还有一个好的芯片(检测方)也去判断这个好的芯片(被检测), 这个结果一定是1,所以这个显示1的总数一定会大于显示0的个数

代码:

import java.util.Scanner;

public class 基础练习_芯片测试 {
	static Scanner scanner=new Scanner(System.in);
	static int[][] map=new int[30][30];
	static int[] count=new int[30];
	static int N;
	public static void main(String[] args) {
		N=scanner.nextInt();
		for(int i=0;i<N;i++) {
			for(int j=0;j<N;j++) {
				map[i][j]=scanner.nextInt();
			}
		}
		for(int i=0;i<N;i++) {
			for(int j=0;j<N;j++) {
				if(i!=j&&map[i][j]==1) {  // 好的测试好的一定是好的,坏的测试好的有百分之50的概率是好的
					count[j]++;
				}
			}
		}
		for(int i=0;i<N;i++) {
			if(count[i]>=N/2) {
				System.out.print(i+1) + " ");
			}
		}
	}
}

**参考学习:**https://blog.csdn.net/huantingyizhan/article/details/104212143

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦码城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值