洛谷入门1【顺序结构】题单题解

目录

超级玛丽

字母转换

 数字反转

再分肥皂水

小鱼的游泳时间

小学数学N合1

三角形面积

苹果和虫子

对角线

上学迟到


【入门1】顺序结构 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

超级玛丽

  • C++多行输出用 R"( )"
#include<iostream>
using namespace std;
int main() {
cout<<R"(                ********
               ************
               ####....#.
             #..###.....##....
             ###.......######              ###            ###
                ...........               #...#          #...#
               ##*#######                 #.#.#          #.#.#
            ####*******######             #.#.#          #.#.#
           ...#***.****.*###....          #...#          #...#
           ....**********##.....           ###            ###
           ....****    *****....
             ####        ####
           ######        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############)"<<endl;
	return 0;
}

字母转换

  • 题目:输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。
  • 注意 :toupper 返回的是int值,若要返回一个字母,还要加上char,即char(toupper())
    #include<iostream>
    #include<ctype.h>
    using namespace std;
    int main(){
    char a;
    cin>>a;
    cout<<char(toupper(a));
    return 0;
    }

    C++API toupper

 数字反转

  •              利用scanf和printf
#include<iostream>
using namespace std;
int main(){
char a,b,c,d;
scanf("%c%c%c.%c",&a,&b,&c,&d);
printf("%c.%c%c%c",d,c,b,a);
return 0;
}

再分肥皂水

  • 输入保留三位小数 %.3f
printf("%.3f\n",t/n);

小鱼的游泳时间

 

#include<iostream>
using namespace std;
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
//在同一天,c一定大于a,只需要判断d和b
if(d>=b)
{
cout<<c-a<<" "<<d-b;  
}
else
{
cout<<c-a-1<<" "<<d+60-b;   
}
return 0;
}

小学数学N合1

  • 注意1.0/4 和 1/4 的区别
  • 如果是1/4 得出结果为0, 1/3同理 但是1.0/4 会得出0.25

 1/4 int类型, 1.0/4 double类型;  1/4.0 double类型 也得出0.25

表达式的结果为最高类型的结果 

else if(T==13)
{cout<<(int)(pow(1.0*4/3*pi*1064,1.0/3))<<endl;}

三角形面积

  • sqrt平方根函数

 

苹果和虫子

  • 剩下几个完整的苹果,那么吃了几口的苹果肯定不算,最后结果转为int 直接抹去小数点后

#include<iostream>
using namespace std;
int main(){
double m,t,s;
cin>>m>>t>>s;
if(t==0)  //注意当吃一个苹果需要0分钟时,意思是吃苹果很快,最后肯定剩下0个苹果。
{cout<<"0"<<endl;}
else if((int)(m-s/t)<=0){ 
cout<<"0"<<endl;}
else{
cout<<(int)(m-s/t)<<endl;}
return 0;
}

对角线

  • 四个顶点有一个对角线交点 
  • unsigned long long范围比long long范围大 
  • unsigned long long 的范围是[0,2^64-1]。long long 的范围是[-2^63-1,2^63+1]
  • n和n-1一定有一个是2的倍数,因此2可以除尽;同理n,n-1,n-2中一定有一个是3的倍数,因此3可以除尽(除掉2只会消除因数2而对3没有影响);同理4也可以除尽

#include<iostream>
using namespace std;
int main(){
unsigned long long n;
cin>>n;
cout<<n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4<<endl;
return 0;
}

 

上学迟到

  • ceil()向上取整
#include<iostream>
#include<math.h>
using namespace std;
int main() {

	double s, v;
	int hour = 7, min;
	cin >> s >> v;
	int total = ceil(s / v) + 10;  //ceil() 向上取整 3/2=2  ceil(s/v) eg:花费3.2分钟,按照4分钟计算
	int totalhour = total / 60;
	min = 60 - total % 60;  //70min,  6:50  60-10
	if (total % 60 == 0)
		min = 00;
	while (totalhour--)
	{
		hour--; //如果只写if (hour < 0) 当hour = 24;时  结果中有24:30 hour从7开始设置,前一天同理,
		if (hour < 0 && min != 00)
			hour = 23;
		else if (hour < 0)
			hour = 24;
	}
	
	printf("%02d:%02d",hour ,min );
	return 0;
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于洛谷上的p1036题目,我们可以使用Python来解决。下面是一个可能的解法: ```python def dfs(nums, target, selected_nums, index, k, sum): if k == 0 and sum == target: return 1 if index >= len(nums) or k <= 0 or sum > target: return 0 count = 0 for i in range(index, len(nums)): count += dfs(nums, target, selected_nums + [nums[i]], i + 1, k - 1, sum + nums[i]) return count if __name__ == "__main__": n, k = map(int, input().split()) nums = list(map(int, input().split())) target = int(input()) print(dfs(nums, target, [], 0, k, 0)) ``` 在这个解法中,我们使用了深度优先搜索(DFS)来找到满足要求的数列。通过递归的方式,我们遍历了所有可能的数字组合,并统计满足条件的个数。 首先,我们从给定的n和k分别表示数字个数和需要选取的数字个数。然后,我们输入n个数字,并将它们存储在一个列表nums中。接下来,我们输入目标值target。 在dfs函数中,我们通过迭代index来选择数字,并更新选取的数字个数k和当前总和sum。如果k等于0且sum等于target,我们就找到了一个满足条件的组合,返回1。如果index超出了列表长度或者k小于等于0或者sum大于target,说明当前组合不满足要求,返回0。 在循环中,我们不断递归调用dfs函数,将选取的数字添加到selected_nums中,并将index和k更新为下一轮递归所需的值。最终,我们返回所有满足条件的组合个数。 最后,我们在主程序中读入输入,并调用dfs函数,并输出结果。 这是一种可能的解法,但不一定是最优解。你可以根据题目要求和测试数据进行调试和优化。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值