- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜分糖果
问题描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
程序首先读入一个整数N(2<N<100),表示小朋友的人数。
接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出
4
import java.io.*;
public class Main {
static int count2;
static int[] arr;
static boolean bl;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String str[] = br.readLine().split(" ");
arr = new int[n];
for (int i = 0; i < arr.length; i++)
arr[i] = Integer.parseInt(str[i]);
func();
}
public static void func() {
if (ifSame()) {
System.out.print(count2);
return;
}
ifEven();
if (ifSame()) {
System.out.print(count2);
return;
}
int temp = arr[arr.length - 1];
for (int a = arr.length - 1; a >= 0; a--) {
if (a > 0) {
arr[a] = arr[a] / 2 + arr[a - 1] / 2;
}
if (a == 0) {
arr[0] = arr[0] / 2 + temp / 2;
}
}
func();
}
public static void ifEven() {
for (int a = 0; a < arr.length; a++) {
if (arr[a] % 2 == 0) {
continue;
} else {
arr[a] += 1;
count2++;
}
}
}
public static boolean ifSame() {
int temp = arr[0];
int count1 = 0;
for (int a = arr.length - 1; a > 0; a--) {
if (temp == arr[a]) {
count1++;
}
}
if (count1 == arr.length - 1) {
bl = true;
}
return bl;
}
}
😜矩阵翻硬币
小明先把硬币摆成了一个 n 行 m 列的矩阵。
随后,小明对每一个硬币分别进行一次 Q 操作。
对第x行第y列的硬币进行 Q 操作的定义:将所有第 ix 行,第 jy 列的硬币进行翻转。
其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。
当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。
小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。
聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。
输入格式
输入数据包含一行,两个正整数 n m,含义见题目描述。
输出格式
输出一个正整数,表示最开始有多少枚硬币是反面朝上的。
样例输入
2 3
样例输出
1
数据规模和约定
对于10%的数据,n、m <= 10^3;
对于20%的数据,n、m <= 10^7;
对于40%的数据,n、m <= 10^15;
对于10%的数据,n、m <= 10^1000(10的1000次方)。
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String n = sc.next();
String m = sc.next();
BigInteger sum = new BigInteger("1");
BigInteger bn = new BigInteger(n);
BigInteger bm = new BigInteger(m);
bn = kaifang(bn,new BigInteger(bn.toString().substring((int)(n.length()/2))),1);
bm = kaifang(bm,new BigInteger(bm.toString().substring((int)(m.length()/2))),1);
sum = sum.multiply(bn).multiply(bm);
System.out.println(sum);
}
private static BigInteger kaifang(BigInteger b,BigInteger bi,int i) {
if( (bi.multiply(bi).add(b)).divide(bi).divide(new BigInteger("2")).equals(bi) ){
System.out.println(i);
return bi;
}
else{
return kaifang(b,(bi.multiply(bi).add(b)).divide(bi).divide(new BigInteger("2")),i+1 );
}
}
}
😜兰顿蚂蚁
兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。
平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。
蚂蚁的移动规则十分简单:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。
蚂蚁的路线是很难事先预测的。
你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。
输入格式
输入数据的第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数。
接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。
接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。
输出格式
输出数据为两个空格分开的整数 p q, 分别表示蚂蚁在k步后,所处格子的行号和列号。
样例输入
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
样例输出
1 3
样例输入
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
样例输出
0 0
import java.io.*;
public class Main {
static int n, m;
static int s, e;
static char[] chs = { 'L', 'U', 'R', 'D', 'L' };
static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1[] = br.readLine().split(" ");
n = Integer.parseInt(s1[0]);
m = Integer.parseInt(s1[1]);
int[][] arr = new int[n][m];
for (int a = 0; a < n; a++) {
String str[] = br.readLine().split(" ");
for (int b = 0; b < m; b++) {
arr[a][b] = Integer.parseInt(str[b]);
}
}
int x, y;
String s2[] = br.readLine().split(" ");
x = Integer.parseInt(s2[0]);
y = Integer.parseInt(s2[1]);
char dec = s2[2].charAt(0);
int z;
z = Integer.parseInt(s2[3]);
s = x;
e = y;
while (count < z) {
if (arr[s][e] == 1) {
for (int i = 0; i < chs.length; i++) {
if (dec == chs[i]) {
dec = chs[i + 1];
break;
}
}
arr[s][e] = 0;
func(dec, s, e);
}
if (arr[s][e] == 0) {
for (int j = 1; j < chs.length; j++) {
if (dec == chs[j]) {
dec = chs[j - 1];
break;
}
}
arr[s][e] = 1;
func(dec, s, e);
}
}
System.out.print(s + " " + e);
}
public static void func(char dec, int x, int y) {
if (dec == 'L') {
e -= 1;
count++;
}
if (dec == 'U') {
s -= 1;
count++;
}
if (dec == 'R') {
e += 1;
count++;
}
if (dec == 'D') {
s += 1;
count++;
}
}
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。