一. ac
题目:
序列生成需要一个基础序列A,这个序列由n个 不大于100的数字组成,同时给定镜像复制次数m。
然后对于A进行m次镜像复制,例如序列A={1,2,3},则一次镜像复制后得到的序列是{1,2,3,3,2,1},两次镜像复制得到的序列是B={1,2,3,3,2,1,1,2,3,3,2,1} 。
现在给出你生成一个序列所需要的参数,请你计算该序列的第k位是多少。
输入第一行包含正整数个数n,镜像次数m,k;
输入第二行包含n个正整数;
3 3 10
1 2 3
输出:3
思路:
数学题,发现规律:例如1 2 3 ,不管镜像多少次,都是 1 2 3 3 2 1 一对的整数倍;
所以构造一个数组tmp用来存一对, tmp的length即为n*2;
用k 除以tmp的lenth,即取出重复的很多对,余数就是 k 在一个tmp中的索引;
由于索引从0开始,所以k需要减1;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int k=in.nextInt();
int[] nums=new int[n];
for(int i=0;i<n;i++){
nums[i]=in.nextInt();
}
//
int[] tmp=new int[n*2];
for(int i=0;i<n;i++){
tmp[i]=nums[i];
}
int j=n;
for(int i=n-1;i>=0;i--){
tmp[j++]=nums[i];
}
int c=n*2;
int lastindex=k%c-1;
System.out.println(tmp[lastindex]);
}
}
二. 通过0.81
题目:
给定n个整数a1, a2, a3 … an。每次操作可以选择其中一个数,
并将这个数加上1或者减去1。小红非常喜欢7这个数,他想知道至少需要多少次操作可以使这n个数的乘积为7?
1 ≤ n ≤ 30000,-109 ≤ ai ≤ 109
样例说明
5
-6 0 2 -2 3
输出6
第一次操作将a1减1,得到[-7,0,2,-2,3]
第二次操作将a4加1,得到[-7,0,2,-1,3]
第三次操作将a3减1,得到[-7,0,1,-1,3]
第四次操作将a5减1,得到[-7,0,1,-1,2]
第五次操作将a5减1,得到[-7,0,1,-1,1]
第六次操作将a2加1,得到[-7,1,1,-1,1],此时所有数的乘积为7;
思路:
首先要乘积为7,那么元素必然有一个7/-7,然后其他元素都是1/-1 ;
那么先选取数组中绝对值最大的数max,让max变成7,其他的元素变成1即可,注意这里让所有元素取Math.abs再和 7或者1比较,即得到差值也就是需要操作的次数!
由于最后必须是正的7,用od来记录正数还是负数,如果是负数,则结果要+2(即由-1变+1);
现在想起来,特殊情况,即当只有一个元素的时候,奇数+2就不对了! 这里改一下,应该能过更多!
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] nums=new int[n];
int od=0;//奇偶
for(int i=0;i<n;i++){
nums[i]=in.nextInt();
}
//找到和7/-7差距最小的
//累加其他的和1/-1差值
int index=0;
int[] res=new int[n];
int max=Integer.MIN_VALUE;
//找最大值
for(int i=0;i<n;i++){
if(max<Math.abs(nums[i]) ){
max=Math.abs(nums[i]); //正数
index=i;
}
}
if(nums[index]<0){
od++; //如果max小于0,od+1;
}
res[index]=Math.abs(max-7);
// 除了index以外的,绝对值和1的差距
for(int i=0;i<n;i++){
if(i==index){ //跳过max
continue;
}
if(nums[i]<0){
od++; //记录奇偶数
}
res[i]=Math.abs(Math.abs(nums[i])-1);
}
int r=0;
for(int i=0;i<n;i++){
r=r+res[i];
}
if(od%2==0){ //偶数
System.out.println(r);
}else{ //奇数
System.out.println(r+2);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89184.html