2021-3-7开学第一周

这里写目录标题

  • 时间转换(I)
  • 数字求和
  • 一二三
  • 三家人
  • 汽水瓶
  • 数字整除

时间转换(I)

题目描述

  • 输入一个正整数(秒钟),请将其转换成为如下格式: 时:分:秒。

输入

  • 单组输入,输入一个正整数表示总秒数。

输出

  • 输出转换之后的时间。

样例输入 Copy

1245

样例输出 Copy

0:20:45

java代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;
		while(sc.hasNext()){
			n = sc.nextInt();
			int hour = n/3600;
			int minute = n%3600/60;
			int second = n%60;
			System.out.println(hour+":"+minute+":"+second);
		}

	}
}

【这个题目的话,主要是在于求小时和分钟,键盘输入的是秒数,秒数除以3600是小时,(一小时是3600秒),秒数除3600取余,这里小于3600的秒数除以3600取余是秒数本身,我是这样理解的啦,如果有问题,也可以告诉我哟!】

C语言代码:

 #include 
int main(){
	int n,hour,minute,second;
	while(scanf("%d",&n)!=EOF){
		hour = n/3600;
		minute = n%3600/60;
        second = n%60;
		printf("%d:%d:%d\n",hour,minute,second);
	
	}
}

数字求和

题目描述

  • 使用递归编写一个程序,计算一个正整数中所有数字之和。例如输入234,输出9。

输入

  • 多组输入,每组输入一个正整数。

输出

  • 输出结果,每个结果占一行。

样例输入 Copy

234

样例输出 Copy

9

java代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n;		
		while(sc.hasNext()){
			n = sc.nextInt();
			System.out.println(getS(n));
		}

	}

  public static int  getS(int n){
	int sum = 0;
	if(n/10==0)
		return n;
	else{
		return getS(n/10)+n%10;
	}
  }
}

【这一题的话,java代码是我看了一个大佬的,因为我不知道怎么用JAVA语言写递归,所以稍微改动了一些变量名,但是C语言是我自己写的哈!不管几位数,反正求和的话就是得到每一位的数字然后加起来】

C语言代码:

#include 
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		printf("%d\n",f(n));
	}
}
int f(int n){	
	if(n/10==0)
		return n;
	else{
		return f(n/10)+n%10;	
	}
}

一二三

题目描述

  • 你弟弟刚刚学会写英语的一(one)、二(two)和三(three)。他在纸上写了好些一二三,可惜有些字母写错了。
  • 已知每个单词最多有一个字母写错了(单词长度肯定不会错),你能认出他写的啥吗?

输入

  • 第一行为单词的个数(不超过 10)。以下每行为一个单词,单词长度正确,且最多有一个字母写错。所有 字母都是小写的。

输出

  • 对于每组测试数据,输出一行,即该单词的阿拉伯数字。输入保证只有一种理解方式。

样例输入 Copy

3 
owe 
too 
theee 

样例输出 Copy

1
2
3

C语言代码:

 #include 
#include 
int main(){
	int n,l;
	char ch[10];
	while(scanf("%d",&n)!=EOF){
		scanf("%s",&ch);
		l = strlen(ch);
		if(l == 5)
			printf("3\n");
		else if(l == 3){
			if((ch[0]=='o'&&ch[1]=='n')||(ch[0]=='o'&&ch[2]=='e')||(ch[1]=='n'&&ch[2]=='e'))		
			    printf("1\n");
			else
				printf("2\n");	
		}

	}
	return 0;
}

【作为一个学得不精的人,我表示我会用那个语言写,我就用哪个语言写,JAVA语言我这题搞不太来,所以没写;读了这个题目后,我严重怀疑我需要学习语言,完全没理解题目意思:
1.读完题目一脸懵,第一反应去CSDN看看别人写的,居然看不懂,我以为的单词是有多个单词,可能从1到10诸如此类, 但其实,题目就是要你判断“你弟弟写的一、二、三,键盘输入只错了一个字母的单词,问你这是几”?哦,我这该死的语文理解能力 o(╥﹏╥)o
2.单词长度为5的只可能是3,也就是three,所以这个很好判断,不管你弟弟是写错了哪个单词,长度又不会变,直接根据长度来;
3.单词one和two长度一致,所以只能根据单词的字母来判断;
4.我这个C语言代码写的略微有些粗糙,但是环境测试通过了,不过还有提升空间,当然也是看了大佬们的代码,才明白了题目的意思,感谢CSDN】

三家人

题目描述

  • 有三户人家共拥有一作花园,每户人家的太太均需帮忙整理花园。A太太工作了 5天,B太太则工作了 4天,才将花园整理完毕。C太太因为正身怀六甲无法加入她们的行列,便出了 90 元。
  • 请问这笔钱如何分给 A、B二位太太较为恰当?A应得多少元? 90/(5+4)*5=50元?如果这么想你就上当了!
  • 正确答案是 60元。如果没想通的话再想想吧。
  • 下面回答一个一般性的问题:假定 A太太工作了 x 天,B 太太工作了 y 天,C 太太出了 90 元,则 A太太应得多少元?输入保证二位太太均应得到非负整数元钱。

输入

  • 输入第一行为数据组数T( T <=20)。每组数据仅一行,包含三个整数x ,y ,z
  • (1<= x ,y <=10,1<= z<=1000)。

输出

  • 对于每组数据,输出一个整数,即 A太太应得的金额(单位:元)。

样例输入 Copy

2
5 4 90
8 4 123

样例输出 Copy

60
123

提示

本题有个小小的陷阱哦。如果答案错的话,认真检查一下代码吧。

【要我说这题,真是考验我的语文能力 o(╥﹏╥)o
1.三个太太本该一起干活的,怎么说呢,三太太不能干 ,所以两个太太不仅干了自己该干的,还干了三太太的活,三太太也是个明白人,不能白干啊,所以 她就出了点钱,慰劳两个太太,现在问你,大太太要拿多少?
2.首先,如果三太太没事,她们三个干这个活,效率是一样的,就拿题目的例子来说吧,三个太太一起干这个活需要九天,平均每个太太干三天,三太太没干吧,大太太帮干了两天,二太太帮干了一天哪,那大太太是不是要拿60块,三分之二嘛,差不多就是这样,给出变量,让你求大太太该拿多少;
3.我就是这样理解的,当然了少不了大佬的帮助,可能理解的也不准确哈,就看看就行了
4.代码极其粗糙,不知道为什么平台给我过,我以为不会过得,绝了,大家尽量自己写吧,可能我理解的也不到位】

java代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double x,y,c;	
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
			while(sc.hasNext()) {
				x = sc.nextDouble();
				y = sc.nextInt();
				c = sc.nextInt();
				double k = (x+y)/3;//平均工作时长
				if(x>=0&&y>=0&&x<=10&&y<=10) {
					if(x<k) {
						 double t = x;
						 x = k;
						 k = t;
					}
					if(0<=c&&c<=1000){
					double money = (x-k)/k*c;
					System.out.println((int)money);//强制转换,看题目输出要求,输出整型哈
					}
				}
			}

	}

}

汽水瓶

题目描述

  • 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,
  • 方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。
  • 如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入

  • 输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出

  • 对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

样例输入 Copy

3
10
81
0

样例输出 Copy

1
5
40

【据我看了大佬们的代码和解析后,真是世界明朗了,就是发现规律之后,嗯,我自己写的可能还是太过麻烦了,也有更简洁的哟,大家自己去发现哈!】

C语言代码:

#include
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		if(1<=n&&n<=100){
			printf("%d\n",qs(n));
		}
		
	}
}
int qs(int n){
	if(n==0)
		return 0;
	else if(n==1)
		return 0;
	else
		return qs(n-2)+1;

}

数字整除

题目描述

  • 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。
  • 例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。

输入

  • 输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=10100),表示待判断的正整数。n=0表示输入结束,你的程序不应当处理这一行。

输出

  • 对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。

样例输入 Copy

34
201
2098765413
1717171717171717171717171717171717171717171717171718
0

样例输出 Copy

1
0
1
0

【这题,老实说,我知道它的意思就是判断是不是17的倍数,但是有一个问题,超限了呀,那个17171717…那么长,肯定不简单,我就在这里犯愁,所以,我就瞄了大佬的代码,其实,我还是不是会很理解,嘘——,我在慢慢理解】

C语言代码:

#include
#include
int main(){
	char shuzu[525];
	int i=0,j=0;
	int t,shu;
	while(scanf("%s",&shuzu)&&shuzu[0]!='0'){//正整数n(1<=n<=10^100)
		shu = 0;
		t = strlen(shuzu);//字符串的长度
		for(i=0;i<t;i++){
			shu = (shu*10+shuzu[i]-'0')%17;//个位数字去掉,再从余下的数中减去个位数的5倍
		}
		if(shu == 0){//能被17整除
			printf("1\n");
		
		}
		else
			printf("0\n");
		
	}
	
}

最后的分享啦!
“所有的惊喜都是铺垫,用心才是重点”
小白也是个弱鸡 o(╥﹏╥)o,有更好的代码也可以告诉我哦

你可能感兴趣的:(#,OJ习题,java,c语言,程序设计)