HHU 欧洲杯(血泪。。。)

本文介绍了一个关于球迷在酒吧消费并支付小费的算法问题,要求最终消费总额为5的倍数且小费占比合理。通过计算不同支付方案的数量,探讨了算法实现的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1012: 欧洲杯

时间限制: 1 Sec   内存限制: 128 MB
提交: 107   解决: 26
[ 提交][ 状态][ 讨论版]

题目描述

两年一度的欧洲杯又开始了,小海可是一个铁杆球迷,每天晚上都会到XX酒吧观看激烈的比赛,而且小海有给小费的习惯,但是他给小费是由原则的:

1.       最终消费的总额必须是5的倍数;

2.       小费必须占最终支付总费用的5%~10%之间(包括边界)

假设小海在酒吧的消费是A元,小海带了B元来酒吧,小海想知道他有多少种支付方案供选择。

总费用 = 消费 + 小费

输入


多组测试数据,请处理到文件结束。

对于每组测试数据:

包含两个整数A和B。

1<=A,B<=2,000,000,000,A<=B。


输出


输出一个整数,代表方案数。


样例输入

4 10023 100

样例输出

01

提示

来源

河海ACM前辈-汪之涛

简直智障。。。当时比赛的时候各种wa,还找不出来错误,这次倒是短了不少,但是细节部分不好好处理,还是会wa,总之一定要细致,处理不能马虎啊,对了,向上取整用ceil函数,在cmath里面

#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
typedef unsigned long long ull;
ull min(ull a,ull b)
{
	if(a<b) return a;
	else return b;
}
int main()
{
	//freopen("input.txt","r",stdin);
	ull a,b;
	while(scanf("%lld%lld",&a,&b)!=EOF)
	{
		double temp=a/19.0;
		//cout<<temp<<endl;
		ull e=a/9;
		//if(s==0) s++;
		ull s=ceil(temp);
		int counter=0;
		e=min(e,b-a);
		for(int i=s;i<=e;i++)
		{
			if((i+a)%5==0) counter++;
		}
		printf("%d\n",counter);
	}
 } 


03-24
<think>嗯,用户问的是关于%hhu的格式说明符。首先,我需要确认%hhu在C语言中的用途。记得在printf和scanf函数中,格式说明符用来指定输入输出的类型。hhu前面的hh是一个长度修饰符,通常用于整数类型,比如unsigned char。 用户可能是在处理字符或小整数值时遇到了问题,或者在输入输出时出现了意外结果。需要解释%hhu的具体用法,尤其是在scanf和printf中的不同行为。比如,在scanf中使用%hhu会读取一个unsigned char变量,而printf中使用%hhu的话,可能会被提升为int,不过需要确认标准是否支持。 另外,用户可能对类型转换和提升规则不太清楚,导致使用错误格式说明符,进而引发错误或警告。比如,如果用户用%u来输出unsigned char,编译器可能会警告,而%hhu可以避免这个问题。需要举例子说明正确和错误的用法,以及在不同函数中的行为差异。 还要考虑用户的实际应用场景,比如处理二进制数据、网络编程中的字节操作,或者需要精确控制数据大小的场合。这时候正确使用%hhu可以确保数据类型的正确性,避免溢出或截断。 可能用户遇到的常见错误包括:忘记使用hh修饰符导致未定义行为,或者在printf中误用%hhu导致输出错误。需要提醒用户注意编译器警告,并建议开启编译选项如-Wall来捕获这些问题。 最后,需要总结%hhu的重要性,强调类型匹配的重要性,特别是在涉及不同平台和编译器时,正确的格式说明符能保证程序的可移植性和稳定性。可能还需要对比其他类似的格式说明符,比如%hhd对于signed char的情况,帮助用户全面理解。</think>以下是对**`%hhu`格式说明符**的详细解析: --- ### **一、本质定义** - **所属标准**:C99标准引入的格式说明符 - **语法结构**:`%hhu` = `%` + 长度修饰符`hh` + 转换说明符`u` - **适用场景**: - `scanf()`系列函数:读取`unsigned char`类型数据 - `printf()`系列函数:输出`unsigned char`类型数据(注意类型提升规则) --- ### **二、技术细节** #### **1. `scanf()`中的行为** ```c unsigned char byte; scanf("%hhu", &byte); // 正确用法 ``` - **输入范围**:接受0-255的十进制数值 - **越界处理**:输入超过255时发生整数溢出(标准未定义行为,常见实现取模运算) #### **2. `printf()`中的特殊表现** ```c unsigned char c = 200; printf("%hhu", c); // 输出200(实际执行unsigned char到int的类型提升) ``` - **类型提升规则**: - 在可变参数函数中,`unsigned char`自动提升为`int` - `%hhu`指示将`int`参数转换回`unsigned char`格式输出 #### **3. 二进制数据解析示例** ```c uint8_t network_byte; // 等同于unsigned char fread(&network_byte, 1, 1, file); printf("Received byte: %hhu\n", network_byte); // 正确显示0-255范围值 ``` --- ### **三、常见误区与调试** #### **1. 典型错误案例** ```c // 错误1:类型不匹配 unsigned char a = 100; printf("%u", a); // 可能编译警告,输出正确但不符合规范 // 错误2:符号混淆 char b = -1; // signed char printf("%hhu", b); // 输出255(二进制补码转换) ``` #### **2. 编译器诊断** ```bash # 开启严格检查(GCC) gcc -Wall -Wformat -Werror=format-security ``` - **警告示例**: ``` warning: format specifies type 'unsigned char *' but the argument has type 'short *' ``` --- ### **四、跨平台注意事项** | 平台特性 | 处理建议 | |-------------------|-----------------------------------| | **C++流式输出** | 使用`static_cast<int>`显式转换 | | **嵌入式系统** | 确保标准库支持C99格式说明符 | | **大端序/小端序** | 仅影响内存存储,不影响%hhu的解析 | --- ### **五、关联格式说明符对比** | 说明符 | 对应类型 | 输入/输出范围 | |----------|------------------|------------------| | `%hhu` | unsigned char | 0 ~ 255 | | `%hhd` | signed char | -128 ~ 127 | | `%hu` | unsigned short | 0 ~ 65,535 | | `%u` | unsigned int | 0 ~ 4,294,967,295| --- **应用建议**: 1. 处理网络协议或文件格式时,优先使用`%hhu`确保字节级精度 2. 与`uint8_t`类型配合使用时,注意包含`<stdint.h>`头文件 3. 调试内存数据时,结合十六进制格式`%02x`进行交叉验证 示例代码: ```c unsigned char buffer[4] = {0x80, 0xFF, 0x0A, 0x7F}; for (int i=0; i<4; i++) { printf("Dec: %3hhu | Hex: 0x%02x\n", buffer[i], buffer[i]); } ``` 输出结果: ``` Dec: 128 | Hex: 0x80 Dec: 255 | Hex: 0xff Dec: 10 | Hex: 0x0a Dec: 127 | Hex: 0x7f ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值