1250 - 2022年春季《算法分析与设计》热身练习题2

1994: 海底沉船

题目描述

X星人在一艘海底沉船上发现了很多很多很多金币,可爱的X星人决定用这些金币来玩一个填格子的游戏。
其规则如下:第1个格子放2枚金币,第2个格子放6枚金币,第3个格子放12枚金币,第4个格子放20枚金币,第5个格子放30枚金币,以此类推。
请问放到第n个格子时一共放了多少枚金币?

输入

多组输入。每组一个正整数n,表示最后一个格子的编号。(n<=100)

输出

对于每一组输入,输出从第1个格子到第n个格子的总金币数。

样例输入 Copy

1
3

样例输出 Copy

2
20
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int fun(int n)
{
	return n * (n + 1);
}
int main()
{
	int n;
	
	while (cin >> n)
	{
		int sum = 0;
		for (int i = 1; i <= n; i++)
		{
			sum += fun(i);
		}
		cout <<sum << endl;
	}

}

1820: 粗心的小表弟

题目描述

今天英语课,小表弟的英语老师教了他三个与动物有关的单词,分别是cat、pig和horse,但是粗心的小表弟在写这三个单词的时候经常会写错。
假如小表弟每个单词最多写错一个字母(当然有时候也是会全部写对的,且字母个数是完全正确的)。
你能否编写一个程序,对小表弟写的单词进行自动纠错。

输入

单组输入。
输入一个可能存在单个字母错误的单词。

输出

输出与输入对应的正确单词。

样例输入 Copy

hoose

样例输出 Copy

horse
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
	string ss;
	cin >> ss;
	if (ss[0] == 'c' && ss[1] == 'a' || ss[0] == 'c' && ss[2] == 't' || ss[1] == 'a' && ss[2] == 't')
		cout << "cat";
	else if (ss[0] == 'p' && ss[1] == 'i' || ss[0] == 'p' && ss[2] == 'g' || ss[1] == 'i' && ss[2] == 'g')
		cout << "pig";
	else
	{
		cout << "horse";
	}
}

2067: 十六进制

题目描述

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

输入

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

输出

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

样例输入 Copy

20

样例输出 Copy

0

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int fun(int n)
{
	int sum = 0;
	int m;
	while (n)
	{
		m = n % 16;
		if (m >= 10)
		{
			sum++;
		}
		n = n / 16;
	}
	return sum;
}
int main()
{
	int n;
	cin >> n;
	cout << fun(n);
}

2091: 平行四边形

题目描述

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

输入

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

输出

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

样例输入 Copy

3

样例输出 Copy

  ***
 ***
***
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int main()
{
	int n;
	cin >> n;
	for (int i = n - 1; i >= 0; i--)
	{
		for (int j = i; j>= 1; j--)
			cout << " ";
		for (int i = 1; i <= n; i++)
			cout <<'*';
		cout << "\n";
	}
	

}

1798: 临时换人

题目描述

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

输入

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

输出

输出替换之后的字符串。

样例输入 Copy

Cameraman: Jack, Lighting engineer: Rose.

样例输出 Copy

Cameraman: Tom, Lighting engineer: Tom.
import java.util.*;
 
public class Main {
    public static void main(String args[]) {
        Scanner sc=new Scanner(System.in);
        String a=sc.nextLine();
        String ss=a.replace("Jack","Tom");
        String ss2=ss.replace("Rose","Tom");
        System.out.println(ss2);
 
 
 
    }
}
 

1760: 第n个数

题目描述

自从学了素数以后,明明喜欢上了数字2、3和5。当然,如果一个数字里面只出现2、3和5这三个数字,他也一样喜欢,例如222、2355、223355。
现在他希望你能够帮他编写一个程序,快速计算出由2、3、5这三个数字组成的由小到大的第n个数,当然也包括2、3和5。

输入

每组输入数据占1行,每行输入一个正整数n。(n<=1000)

输出

每组输出数据占1行,即满足要求的第n个数。

样例输入 Copy

3

样例输出 Copy

5

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
string s[1005];
int cnt = 0;
void init(){
    queue<string>q;
    q.push("2");
    q.push("3");
    q.push("5");
    queue<string>temp1;
    queue<string>temp2;
    while(1){
        for(int i = 1;i<=3;++i){
            char c;
            if(i==1)c='2';
            if(i==2)c='3';
            if(i==3)c='5';
             
            while(!q.empty()){
                if(i==1){
                    s[++cnt] = q.front();
                    //cout<<s[cnt]<<endl;
                    if(cnt>=1000)return;
                }
                temp1.push(q.front());
                temp2.push(c+q.front());
                q.pop();
            }
            while(!temp1.empty()){
                q.push(temp1.front());
                temp1.pop(); 
            } 
        }
        while(!q.empty())q.pop();
        while(!temp2.empty()){
            q.push(temp2.front());
            temp2.pop(); 
        } 
    }
}
int main(){
    init();
    int n;
    while(~scanf("%d",&n)){
        cout<<s[n]<<endl;
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值