Day22 洛谷P1427 小鱼的数字游戏(栈)

博客内容介绍了如何帮助小鱼解决一个数字游戏问题,游戏要求将一串以0结束的数字反向输出。输入是一串以空格间隔的整数,输出也是反向的整数序列。博客提供了使用栈作为解决方案的思路。

题目描述

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 ai(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入格式

一行内输入一串整数,以 0 结束,以空格间隔。

输出格式

一行内倒着输出这一串整数,以空格间隔。

输入输出样例

输入 #1
3 65 23 5 34 1 30 0
输出 #1
30 1 34 5 23 65 3

说明/提示 数据规模与约定

对于100% 的数据,1≤ai​≤2^31-1,数字个数不超过 100。

答案(栈)

#include<iostream>
using namespace std;
int a[101];//如果你的第一个数存储在a[1]里,一定要多开一两个空间 ,以防越界访问
int top=0,c;
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		a[++top]=c;
		/*
		或者写成:
		top++;
		a[top]=c;
		个人比较喜欢压码……
		*/ 
	}
	while(top!=0){
		cout<<a[top--]<<" ";
		/*
		或者写成:
		cout<<a[top];
		top--;
		*/ 
	}
	return 0;
} 

答案(指针)

#include<stdio.h>
int main()
{
    int a[105]={1};
    int *p=a;
    scanf("%d",p++); 
    while (*(p-1)!=0){
        scanf("%d",p++);
    }
    p--;
    while (p!=a){
        p--;
        printf("%d ",*p);
    }
    return 0;
}
### P5707 上学迟到 题解与解题思路 #### 问题分析 P5707 是一道关于时间计算的题目,主要考察选手对时间单位转换以及边界条件处理的能力。题目要求根据给定的距离 `s` 和速度 `v`,计算出一个人为了不迟到需要几点几分出发,并且考虑到可能前一天晚上就需要出发的情况。 以下是该问题的核心要点: - **清理卫生时间**:yyy 需要额外花费 10 分钟用于清理卫生,在编程时需将其加入总耗时中[^2]。 - **向上取整**:由于无法精确到达目的地,因此对于不能整除的速度情况应采用向上取整的方式计算所需时间[^2]。 - **时间范围约束**:题目规定提前的时间不会超过一天,这意味着我们需要特别关注跨越午夜(即凌晨零点)的情形[^3]。 #### 数学模型构建 设 yyy 的家到学校的距离为 \( s \),步行速度为每分钟走 \( v \) 米,则其正常所需的行走时间为 \( t_{\text{walk}} = \lceil \frac{s}{v} \rceil \)[^4]。加上清洁所花掉的固定十分钟之后得到总的准备时间 \( T = t_{\text{walk}} + 10 \)。最后一步便是依据此总时间反推出应该何时出门: 当 \( T \leqslant 480 \)(代表当天早上八点钟之前的某时刻), 则直接用\( 480-T\) 来得出具体小时数和剩余分钟数; 反之则表明实际出发瞬间已经越过了当日界限进入前一日夜晚时段,此时应用公式\( H=(1440-(T-480))/60,\ M=(1440-(T-480)) \% 60 \)完成相应换算操作[^4]。 #### C++ 实现代码 下面是基于以上逻辑编写的完整程序版本: ```cpp #include <bits/stdc++.h> using namespace std; int main(){ int s, v; cin >> s >> v; // Calculate total time including cleaning int totalTime = ceil((double)s / v) + 10; if(totalTime <= 480){ // Departure within the same day before midnight printf("%02d:%02d\n", (480-totalTime)/60 , (480-totalTime)%60 ); } else{ // Departure on previous night after midnight printf("%02d:%02d\n", (1440-(totalTime-480))/60 ,(1440-(totalTime-480))%60); } return 0; } ``` 上述代码实现了从输入读取至最终结果打印全过程的功能实现。 --- #### 输出格式注意事项 需要注意的是本题还涉及到了特定 HH:mm 形式的字符串输出需求。无论是在表示小时还是分钟部分都可能存在仅有一位数字的现象发生,所以务必得利用 `%02d` 这样的占位符确保任何情况下都能正确填充前置零字符[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值