第一题
题目描述:
定义1-9的置换首先给出你一个整数,可能为正也可能为负,这个数字中仅包含数字1-9,现在定义一个1-9的置换,即指定将整数中的某个数字按顺序变换为另一个数字,请你输出变换以后的数字是多少
未AC
第二题
题目描述:
最外面的边缘是白色。最外层的圆是黑色,往里一层是白色,再往里是黑色,以此类推……输入N表示所有圆的个数,a[i]表示第i个圆的半径(1<=i<=N)。求黑色区域的总面积(结果四舍五入)
解题思路:
分为两类:内部实心圆全黑和全白,然后分别数学计算
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int[] circler = new int[num];
for(int i=0;i<num;i++){
circler[i] = in.nextInt();
}
double blackarea = 0;
if(num%2 == 1){
//内部为黑圆
blackarea += Math.PI *(
circler[0]*circler[0]);
for(int i =1; i< num-1; i+=2){
blackarea += Math.PI *(
circler[i+1]*circler[i+1]-
circler[i]*circler[i]
);
}
}else {
for(int i= 0;i<num-1;i+=2){
blackarea += Math.PI *(
circler[i+1]*circler[i+1]-
circler[i]*circler[i]
);
}
}
//要四舍五入
System.out.printf("%.5f",blackarea);
}
}
第三题
题目描述:
一个序列是有趣的需要满足当且仅当这个序列的每一个元素ai 满足i 整除ai 。
现在给定一个长度为n的数组,问这个数组有多少个非空的子序列是有趣的,由于答案可能比较大,只需要输出在模998244353意义下答案的就行了。一个长度为n的数组的非空子序列定义为从这个数组中移除至多n-1个元素后剩下的元素有序按照原顺序形成的数组。比如说对于数组[3,2,1],它的非空子序列有[3],[2],[1],[3,2],[3,1],[2,1],[3,2,1]。
解题思路:
用dp[i]表示长度为i的“有趣”子序列的个数,求取长度为i的“有趣”子序列个数dp[i],并记录对应的所有末尾的下标index[1-j],再遍历所有末尾的下标index[1-j],每次找到index[j]后的所有能被(i+1)整除的数则dp[i+1]加一。通过dp[i]算出dp[i+1]。以此类推
import java.util.Arrays;
import java.util.Scanner;
public class Main {
//非空子序列,模998244353
//5
// 1 1 1 1 2 9种
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int[] arrays = new int[num];
//动态规划
int[] dp = new int[num];
dp[0] = num;
int[][] index = new int[num][num];
for(int i=0;i<num;i++){
Arrays.fill(index[i],-1);
arrays[i] = in.nextInt();
index[0][i] = i;
}
//先找出所有子序列,后判断是否有趣
//还有一个参数记录所有末尾字符的下标,不去重复
// dp[i] = dp[i-1] + i的倍数;
for(int j = 1;j < num-1;j++){
int m = 0;
for(Integer tempnum : index[j-1]){
if(tempnum == -1){
break;
}
for(int k = tempnum +1;k<num;k++){
if(arrays[k] % (j+1) == 0){
dp[j] += 1;
index[j][m++] = k;
}
}
}
}
int result = 0;
for(int i =0;i<num;i++){
result += dp[i];
}
System.out.println(result);//换行
}
}
第四题
题目描述:
小仓酷爱射击运动。今天的小仓会进行N轮射击,已知每次击中靶心的概率为p/q,每当小仓击中靶心,如果是连续k次击中,那么小仓会获得a[k]的得分。小仓希望知道最后她的期望得分是多少。
未AC