第一周算法学习整理

算法练习之周总结(10.31-11.6)

学习目标:

一周算法初级之初级练习

学习内容:

1、问题 : 话费计算
2、问题 : 时间转换
3、问题 : 缩位求和
4、问题 : 单词加密
5、问题 : 猴子吃桃问题


学习时间:

1、 周一至周五晚上 7 点—晚上9点
2、 周六上午 9 点-上午 11 点
3、 周日下午 3 点-下午 6 点


学习产出:

1、 CSDN 技术博客 1 篇
2、 学习的 plog 1 个

内容整理总结:

问题一:话费计算(c++)

题目描述
全球通用户月租费50元,话费每分钟0.4元,输入用户当月通话分钟数,输出用户当月话费,小数点后留一位。
输入:当月通话分钟数
输出:用浮点数输出当月话费
样例输入:80
样例输出:82.0

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	
	double bills = 0;//定义话费
	double calltime = 0;//每月通话时间
	cin >> calltime;
	bills = 50 + calltime * 0.4;
	cout << setiosflags(ios::fixed) << setprecision(1) << bills;//保留小数点后一位小数

}
问题一涉及知识点总结:

小数点后位数保留问题
首先应注明头文件:“iomanip”

(1)setprecision——保留格式为整数位加上小数位的个数

double a=3.1415;
cout<<setprecision(3)<<a<<endl;
//输出结果为3.14

(2)fixed + setprecision¬——保留小数点后的位数

double a=3.1415;
cout<<setiosflags(ios::fixed)<<setprecision(3)<<a<<endl;
//输出结果为3.142--自动进位
//或者cout<<fixed<<setprecision(3)<<a<<endl

(3)scientific + setprecision——科学保留小数点后的位数

double bills = 3.14159;
cout << scientific << setprecision(3) << bills<<endl;
cout << scientific << setprecision(5) << bills<<endl;
//3.142e+00
//3.14159e+00

问题二:时间转换(c++)

题目描述

给定一个以秒为单位的时间t,要求用 “< H> :< M> :< S> ”的格式来表示这个时间。< H> 表示时间,< M> 表示分钟, 而< S> 表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。
输入:输入只有一行,是一个整数t(0< =t< =86399)。
输出:输出只有一行,是以“< H> :< M> :< S> ”的格式所表示的时间,不包括引号。
样例输入:5436
样例输出:1:30:36

#include<iostream>
using namespace std;
int main()
{
	int hr, mi, se;
	int t;
	cin >> t;
	hr = t / 3600;
	mi = (t % 3600) / 60;
	se = t % 60;
	cout << hr << ":" << mi << ":" << se << endl;
	return 0;
}
问题二涉及知识点总结:

%代表取余运算符 即a/b后的余数
eg:a=31 b=10;
a/b=3 a%b=1

问题三:缩位求和(c++)

题目描述

在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。比如:248 * 15 = 3720
把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得
2 + 4 + 8 = 14 ==> 1 + 4 =
5;
1 + 5 = 6
5 * 6
而结果逐位求和为 3
5 * 6 的结果逐位求和与3符合,说明正确的可能性很大!!(不能排除错误)
请你写一个计算机程序,对给定的字符串逐位求和:
输入:输入为一个由数字组成的串,表示n位数(n<1000);
输出:输出为一位数,表示反复逐位求和的结果。
样例输入:35379
样例输出:9

#include<iostream>
#include<string>
using namespace std;
string change(string num)
{
	if (num.length() == 1)
	{
	//剩一位,直接返回
		return num;
	}
	int sum=0;
	for (int i = 0; i < num.length(); ++i)
	{
	
		sum += stoi(num.substr(i, 1));
		//从第一位开始截的字符串转为整数类型后求和
	}
	return (change(to_string(sum)));
	//将数值转化为字符串
}
int main()
{
//由于输入的数字可能很大 选择字符串来接收 
	string num;
	cin >> num;
	cout << change(num) << endl;
	return 0;

}
问题三涉及知识点总结:

1.stoi()函数

字符处理函数,把数字字符串转换成int输出

2.substr()函数 (俗称:字符截取函数)

解析:
  格式1: substr(string string, int a, int b);

    1、a 截取字符串的开始位置
    2、b 要截取的字符串的长度

格式2:substr(string string, int a) ;

    1、string 需要截取的字符串
    2、a 可以理解为从第a个字符开始截取后面所有的字符串。

3.to_string()函数

将数值转化为字符串

问题四:单词加密(c++)

题目描述

要将"China"加密,加密规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母"A"后面第4个字母是"E".“E"代替"A”。因此,“China"应译为"Glmre”。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
输入:原文,例如:China。遇到空格就结束
输出:加密后的密文
样例输入:China
样例输出:Glmre

#include<iostream>
using namespace std;
int main()
{
	char a[10];
	gets_s(a);
	for (int i = 0; a[i]!='\0'; ++i)
	{
		if (a[i] >= 'a' && a[i] <= 'z')
		{
			a[i] = (a[i] + 4 - 'a') % 26 + 'a';
		}
		if (a[i] >= 'A' && a[i] <= 'Z')
		{
			a[i] = (a[i] + 4 - 'A') % 26 + 'A';
		}
	}
	puts(a);
	return 0;
}

问题五:猴子吃桃(c++)

题目描述

猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入:N
输出:桃子总数
样例输入:10
样例输出:1534

#include<iostream>
using namespace std;
int main()
{
	int last=1, sum=0, day;
	cin >> day;
	while(day>1)
	{
		sum = (last + 1) * 2;
		last = sum;
		day--;
	}
	cout << last;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值