算法练习之水题

想起来最近宿舍楼门口贴的那张海报了,说是有一个csdn高校俱乐部的编程挑战赛,那今天我就做做看吧。

像一般这种都是从最简单的开始的,那为了找找感觉,我们也从第一题开始。

第一题:

题目很简单,完成函数reverse,要求实现把给定的一个整数取其相反数的功能,举两个例子如下: x = 123, return 321 x = -123, return -321 


这个要做的就是先判断是不是负数,然后把每位的数字都提取出来 。

int reverse(int num){
	int num2=0;
	while(abs(num)>0){
	  num2+=num%10;
	  num/=10;
	  if(num%10!=0)
	  num2*=10;
	}
	if(num<0){
	 num2*=-1;
	}
	return num2;
}
恩,第一题轻松过关

第二题:

有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。 我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。 可以进行的操作是: 把一个容器灌满; 把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸); 用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。     问是否能够通过有限次操作,使得水缸最后恰好有C升水。 输入:三个整数A, B, C,其中 0 < A , B, C <= 1000000000 输出:0或1,表示能否达到要求。 函数头部: c语言:1表示可以,0表示不可以 int can(int a,int b,int c); c++语言: true表示可以,false表示不可以 bool can(int a,int b,int c); java语言:true表示可以,false表示不可以 public class Main {     public static boolean can(int a,int b,int c); } 
这个是其实翻译过来就是求ab的最大公约数。翻译的太快了,在近一点的翻译就是,是否存在两个数x y,使得ax+by=c,a和b的最大公约数也是他们之间通过减运算能够达到的最小的数值。这种问题里边最小的数是最重要的,因为这个数才决定了最后能不能达到c升水。


第三题

我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。 现在给定一个字符串,输出它的最大可能的完美度。 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。 函数头部 C int perfect(const char *s); C++ int perfect(const string &s); java public static int perfect(String s);

这个翻译过来就是统计字符出现的次数和不同字符的个数,最多的分配为26,依次递减,不用在意哪个出现的最多。


#include<stdio.h>
#include<math.h>
int perfect(const char *s){
	int i,j;
	int temp;
	int sum=26;
	int result=0;
	int per[26]={0};
	for(i=0;s[i];i++){
		if(s[i]>=97&&s[i>=122]){
			per[s[i]-97]++;
		}
		else{
			per[s[i]-65]++;
		}
	}
	for(i=0;i<25;i++){
		for(j=i;j<26;j++){
			if(per[j]>per[i]){
				temp=per[i];
				per[i]=per[j];
				per[j]=temp;
			}

		}

	}
	for(i=0;per[i];i++){
		result+=per[i]*sum;
		sum--;
	}
	return result;
}
很轻松 一次就a了




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值