- 点击跳转专栏=>Unity3D特效百例
- 点击跳转专栏=>案例项目实战源码
- 点击跳转专栏=>游戏脚本-辅助自动化
- 点击跳转专栏=>Android控件全解手册
- 点击跳转专栏=>Scratch编程案例
- 点击跳转=>软考全系列
- 点击跳转=>蓝桥系列
👉关于作者
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单。
👉实践过程
需要所有整理的文档可底部卡片联系我,直接发压缩包。
😜数字游戏
问题描述
栋栋正在和同学们玩一个数字游戏。
游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。
为了使数字不至于太大,栋栋和同学们约定,当在心中数到 k-1 时,下一个数字从0开始数。例如,当k=13时,栋栋和同学们报出的前几个数依次为:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
游戏进行了一会儿,栋栋想知道,到目前为止,他所有说出的数字的总和是多少。
输入格式
输入的第一行包含三个整数 n,k,T,其中 n 和 k 的意义如上面所述,T 表示到目前为止栋栋一共说出的数字个数。
输出格式
输出一行,包含一个整数,表示栋栋说出所有数的和。
样例输入
3 13 3
样例输出
17
样例说明
栋栋说出的数依次为1, 7, 9,和为17。
数据规模和约定
1 < n,k,T < 1,000,000;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
long n = scan.nextInt();
long k = scan.nextInt();
long t = scan.nextInt();
long sum = 1;
long now = 1;
long v1 = (1+n)*n/2;
long v2 = n*n;
for(int i=0;i<t-1;i++){
now = (v1+i*v2+now)%k;
sum += now;
}
System.out.println(sum);
scan.close();
}
}
😜城市建设
问题描述
栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。
C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路来连接其中的一些地点,每条道路可以连接其中的两个地点。另外由于C市有一条河从中穿过,也可以在其中的一些地点建设码头,所有建了码头的地点可以通过河道连接。
栋栋拿到了允许建设的道路的信息,包括每条可以建设的道路的花费,以及哪些地点可以建设码头和建设码头的花费。
市长希望栋栋给出一个方案,使得任意两个地点能只通过新修的路或者河道互达,同时花费尽量小。
输入格式
输入的第一行包含两个整数n, m,分别表示C市中重要地点的个数和可以建设的道路条数。所有地点从1到n依次编号。
接下来m行,每行三个整数a, b, c,表示可以建设一条从地点a到地点b的道路,花费为c。若c为正,表示建设是花钱的,如果c为负,则表示建设了道路后还可以赚钱(比如建设收费道路)。
接下来一行,包含n个整数w_1, w_2, …, w_n。如果w_i为正数,则表示在地点i建设码头的花费,如果w_i为-1,则表示地点i无法建设码头。
输入保证至少存在一个方法使得任意两个地点能只通过新修的路或者河道互达。
输出格式
输出一行,包含一个整数,表示使得所有地点通过新修道路或者码头连接的最小花费。如果满足条件的情况下还能赚钱,那么你应该输出一个负数。
样例输入
5 5
1 2 4
1 3 -1
2 3 3
2 4 5
4 5 10
-1 10 10 1 1
样例输出
9
样例说明
建设第2、3、4条道路,在地点4、5建设码头,总的花费为9。
数据规模和约定
对于20%的数据,1<=n<=10,1<=m<=20,0<=c<=20,w_i<=20;
对于50%的数据,1<=n<=100,1<=m<=1000,-50<=c<=50,w_i<=50;
对于70%的数据,1<=n<=1000;
对于100%的数据,1 <= n <= 10000,1 <= m <= 100000,-1000<=c<=1000,-1<=w_i<=1000,w_i≠0。
import java.util.*;
public class Main {
public static void main(String []arge){
Scanner sc = new Scanner(System.in);
int n=Integer.parseInt(sc.next()),m=Integer.parseInt(sc.next());
City city = new City(n,m);
for(int i=1;i<=m;i++){
city.edge[i] = new Edge(Integer.parseInt(sc.next()),Integer.parseInt(sc.next()),Integer.parseInt(sc.next()));
}
int wharf = 0;
for(int i=1;i<=n;i++){
int num = Integer.parseInt(sc.next());
if(num!=-1){
wharf++;
city.edge[m+wharf] = new Edge(0,i,num);
}
}
city.wharf = wharf;
city.tree();
sc.close();
}
}
class Edge{
int start,destination,value;
Edge(int start,int destination,int value){
this.start = start;
this.destination = destination;
this.value = value;
}
}
class City{
Edge[] edge;
int n,m,wharf;
int[] father;
City(int n,int m){
this.n = n;
this.m = m;
wharf = 0;
edge = new Edge[m+n+1];
father = new int[n+1];
}
void tree(){
init();
for(int i=1;i<=m;i++){
int a = unionsearch(edge[i].start);
int b = unionsearch(edge[i].destination);
if(a!=b){
father[a] = b;
}
}
int i;
for(i=2;i<=n;i++){
if(unionsearch(1)!=unionsearch(i)){
break;
}
}
init();
QuickSort(1,m+wharf+1);
if(i==n+1){
int sum1 = kruskal(false);
init();
int sum2 = kruskal(true);
System.out.println(sum1<sum2 ? sum1:sum2);
}
else{
System.out.println(kruskal(true));
}
}
int kruskal(boolean flag){
int sum = 0;
int num = m+wharf;
for(int i=1;i<=num;i++){
if(edge[i].start==0 && flag==false) continue;
int a = unionsearch(edge[i].start);
int b = unionsearch(edge[i].destination);
if(a!=b || edge[i].value<0){
sum += edge[i].value;
father[a] = b;
}
}
return sum;
}
void init(){
for(int i=0;i<=n;i++){
father[i] = i;
}
}
int unionsearch(int x){
if(x == father[x]) return x;
father[x] = unionsearch(father[x]);
return father[x];
}
void QuickSort(int left,int right){
if(left<right){
int middle = Partition(left,right);
QuickSort(left,middle);
QuickSort(middle+1,right);
}
}
int Partition(int left,int right){
Edge key = edge[left];
int i = left;
for(int j=left+1;j<right;j++){
if(edge[j].value < key.value){
i++;
Edge news = edge[j];
edge[j] = edge[i];
edge[i] = news;
}
}
Edge news = edge[i];
edge[i] = edge[left];
edge[left] = news;
return i;
}
}
😜最大子阵
问题描述
给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。
其中,A的子矩阵指在A中行和列均连续的一块。
输入格式
输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。
接下来n行,每行m个整数,表示矩阵A。
输出格式
输出一行,包含一个整数,表示A中最大的子矩阵中的元素和。
样例输入
3 3
-1 -4 3
3 4 -1
-5 -2 8
样例输出
10
样例说明
取最后一列,和为10。
数据规模和约定
对于50%的数据,1<=n, m<=50;
对于100%的数据,1<=n, m<=500,A中每个元素的绝对值不超过5000。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
String[] s = sc.readLine().split(" ");
int n = Integer.parseInt(s[0]);
int m = Integer.parseInt(s[1]);
int[][] f = new int[n][m];
for (int i = 0; i < n; i++) {
s = sc.readLine().split(" ");
for (int j = 0; j < m; j++) {
f[i][j] = Integer.parseInt(s[j]);
}
}
System.out.print(cc(f));
}
static int csum(int[] s) {
int b = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < s.length; i++) {
if (b > 0)
b += s[i];
else
b = s[i];
if (b > max)
max = b;
}
return max;
}
static int cc(int[][] s) {
int[] c = new int[s[0].length];
int max = Integer.MIN_VALUE;
int n = s.length, m = s[0].length;
for (int i = 0; i < n; i++) {
for (int k = 0; k < m; k++) {
c[k] = 0;
}
for (int j = i; j < n; j++) {
for (int k = 0; k < m; k++) {
c[k] += s[j][k];
}
int d = csum(c);
if (d > max)
max = d;
}
}
return max;
}
}
😜蚂蚁感冒
问题描述
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
输入格式
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
输出格式
要求输出1个整数,表示最后感冒蚂蚁的数目。
样例输入
3
5 -2 8
样例输出
1
样例输入
5
-10 8 -20 12 25
样例输出
3
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[n+1];
int b[]=new int[n+1];
for(int i=1;i<=n;i++){
a[i]=sc.nextInt();
if(a[i]<0)
b[i]=0;
else {
b[i]=1;
}
}
int k=a[1]>0?1:0;
int x=0,y=0,q=0,w=0;
for(int i=2;i<=n;i++){
if(Math.abs(a[1])<Math.abs(a[i])&&a[1]>0&&b[i]==0)
x++;
if(Math.abs(a[1])>Math.abs(a[i])&&a[1]<0&&b[i]==1)
y++;
if(Math.abs(a[1])>Math.abs(a[i])&&a[1]>0&&b[i]==1)
q++;
if(Math.abs(a[1])<Math.abs(a[i])&&a[1]<0&&b[i]==0)
w++;
}
if(k==1)
if(x!=0)
System.out.println(x+q+1);
else
System.out.println(1);
else {
if(y!=0)
System.out.println(y+w+1);
else {
System.out.println(1);
}
}
}
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。