2023年秋季学期《算法分析与设计》练习2 OJ-1384 算法分析与设计练习2,使用python,java以及C语言

时间转换

题目描述

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

输入

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

输出

输出转换之后的时间。

样例输入 Copy
1245
样例输出 Copy
0:20:45
#include <stdio.h>
 
int main()
{
	int input;
	while(scanf("%d",&input)!=EOF){
		printf("%d:%d:%d",input/3600,input%3600/60,input%60);	
	}
	return 0;	
}

数字求和

题目描述

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

输入

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

输出

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

样例输入 Copy
234
样例输出 Copy
9
#include <stdio.h>

int compute(int input)
{
	if(input/10==0)
	{
		return input;
	}else{
		return compute(input/10)+input%10;
	}
}

int main()
{
	int input;
	while(~(scanf("%d",&input)))
	{
		printf("%d\n",compute(input));
	}
	return 0;	
}
def compute(num):
    if(num / 10 == 0):
        return 0
    else:
        return int(compute(num / 10) + (num % 10))

while(1):
    string = input()
    num = int(string)
    print(compute(num))

十六进制

题目描述

小米同学最近在学习进制转换。众所周知,在表示十六进制数时,除了0-9这九个阿拉伯数字外,还引入了“A”、“B”、“C”、“D”、“E”和“F”这六个英文字母(不区分大小写)。
现在给你一个十进制正整数,请问在将其转换为十六进制之后,对应的十六进制表示中有多少位是字母?

输入

单组输入。
输入一个十进制正整数N(N<=10^6)。

输出

输出将N转换成十六进制数字后所包含的字母位的数量,如果没有字母位则输出0。

样例输入 Copy
20
样例输出 Copy
0
#include <stdio.h>
 
int main()
{
	int input,count=0;
	scanf("%d",&input);
	while(input>0) //&&input<=1000000
	{
		if((input%16)>=10)
		{
			count+=1;
		}
		input=input/16;
	}
	printf("%d",count);
	return 0;	
}

平行四边形

题目描述

Kimi想用“*”号构成一个平行四边形并在屏幕上输出。
当输入一个大于等于2的正整数N时,屏幕上将显示一个由N*N个“*”组成的平行四边形。
例如:输入3,输出如下平行四边形。
  ***
 ***
***

输入

输入一个正整数N,1<N<=100。

输出

输出一个N行,每行N个“*”组成的平行四边形。

样例输入 Copy
3
样例输出 Copy
  ***
 ***
***
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main()
{
	int input;
	scanf("%d",&input);
	if(input>=0&&input<=100)
	{
		for(int i=1;i<=input;i++)
		{
			for(int x=0;x<(input-i);x++)
			{
				printf(" ");	
			}
			for(int y=0;y<input;y++)
			{
				printf("*");
			}
			printf("\n");
		}
	}
	return 0;	
}
 
n = int(input())
i = 0
if n>=1 and n<=100:
    while i < n :
        print(" " * (n-1-i) + "*" * n)
        i = i + 1

临时换人

题目描述

因为某些原因,Jack和Rose没有办法参加毕业演出,他们两个的工作任务都将由劳模Tom来代替。
现在需要更新演职人员名单,将所有的Jack和Rose替换成Tom。
请你编写一段程序实现人员替换功能。

输入

单组输入。
输入一个字符串(可能有空格,字符串长度<=1e5),包含若干Jack和Rose。

输出

输出替换之后的字符串。

样例输入 Copy
Cameraman: Jack, Lighting engineer: Rose.
样例输出 Copy
Cameraman: Tom, Lighting engineer: Tom.
import java.util.Scanner;
import java.util.*;

public class Main
{
    public static void main(String[] args) 
    {
        Scanner scanner = new Scanner(System.in);
        String str;
        str = scanner.nextLine();
        str = str.replaceAll("Jack", "Tom");
        str = str.replaceAll("Rose", "Tom");
        System.out.println(str);
        scanner.close();
    }
}
before = input()
mid = before.replace("Jack", "Tom")
after = mid.replace("Rose", "Tom")
print(after)

数字整除

题目描述

定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的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
<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">34
201
2098765413
1717171717171717171717171717171717171717171717171718
0</span></span></span></span>
样例输出 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">1
0
1
0</span></span></span></span>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int i=0,j=0;
    int x = 0;
    int result[10];
    char num;
    scanf("%c", &num);
    do {
    	//只要不换行,一直输入单个字符组成字符串,并且判断这个数是否是17的倍数 
        while (num != '\n') {
        	//x左移一位加上后面输入的位 
            x *= 10;
            //所有数字都是以字符形式读入,因此进行运算前需要进行 num - '0' 
            x += num - '0';
            x %= 17;
            scanf("%c", &num);
        }
        if (x == 0)
        {
        	result[i++]=1;	
		}else{
        	result[i++]=0;	
		}
		//换行以后输入下一组,x置零 
        scanf("%c", &num);
        x = 0;
    } while (num != '0');
    for(j=0;j<i;j++)
	{
		printf("%d\n",result[j]);
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值