编程java:饮料兑换活动、冰田区域块数

在网上找了两道编程题自己写一下练手,链接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);
		
		
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值