在网上找了两道编程题自己写一下练手,链接https://blog.csdn.net/yujianlingfeng/article/details/77607800?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
1、饮料兑换活动
阿里巴巴的食堂搞活动促销,已知某饮料1瓶3元钱,4个瓶盖可以换一瓶,2个空瓶可以换一瓶,则30元最多可以喝几瓶。
输入:
A //A表示饮料单价
B //B表示瓶盖换瓶比
C //C表示空瓶换瓶比
D //D表示给定的钱数
输出:S
package 算法;
import java.util.*;
public class Bottle {
public static void main(String[] args){
int price;
int capRatio;
int bottleRatio;
int money;
Scanner sc=new Scanner(System.in);
price=sc.nextInt();
capRatio=sc.nextInt();
bottleRatio=sc.nextInt();
money=sc.nextInt();
int num=0;
int emptyBottle=money/price;
int emptyCap=emptyBottle;
num+=emptyBottle;
int emptyBottleZ;
int emptyBottleY;
int enptyCapZ;
int enptyCapY;
while(emptyBottle/bottleRatio!=0 || emptyCap/capRatio !=0 ){
emptyBottleZ=emptyBottle/bottleRatio;
emptyBottleY=emptyBottle%bottleRatio;
enptyCapZ=emptyCap/capRatio;
enptyCapY=emptyCap%capRatio;
emptyBottle=emptyBottleZ+emptyBottleY+enptyCapZ;
emptyCap=emptyBottleZ+enptyCapZ+enptyCapY;
num=num+emptyBottleZ+enptyCapZ;
}
System.out.print(num);
}
}
2、求冰田区域块数
将一个区域,分成 m×n 个块,若某一个块有冰则用 * 表示,无冰则用 0 表示,任给一个这样的区域,求冰田区域(冰田区域划分规则:如果两个小块之间能够在不穿越其他块的情况下连成直线,则**属于同一冰田区块)个数?
package 算法;
import java.util.*;
public class IceNum {
public static void area(char[][] c,int i,int j,int m,int n){
if((i-1)>=0 && (j+1)<n && c[i-1][j+1]!='0'){
c[i-1][j+1]='0';
area(c,i-1,j+1,m,n);
}
if((j+1)<n && c[i][j+1]!='0'){
c[i][j+1]='0';
area(c,i,j+1,m,n);
}
if((i+1)<m && c[i+1][j]!='0'){
c[i+1][j]='0';
area(c,i+1,j,m,n);
}
if((i+1)<m && (j+1)<n && c[i+1][j+1]!='0'){
c[i+1][j+1]='0';
area(c,i+1,j+1,m,n);
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
String[] s=new String[m];
char[][] c=new char[m][n];
int num=0;
for(int i=0;i<m;i++){
s[i]=sc.next();
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
c[i][j]=s[i].charAt(j);
}
}
for(int j=0;j<n;j++){
for(int i=0;i<m;){
if(c[i][j]=='0'){
i++;
}else{
num++;
area(c,i,j,m,n);
i++;
}
}
}
System.out.print(num);
}
}