1101PK赛

#include <stdio.h>
/*
作者: 
厦门理工学院
    计算机与信息工程学院 FnLock
时间:2017年10月10日17:38:36
程序描述:
PK赛

Time Limit:1000MS  Memory Limit:65536K
Total Submit:909 Accepted:613

Description

一年一度的厦门理工学院程序设计大赛又开始了,今年是第五届。今年赛会组织方决定用一种新规则决定获胜的选手。在每一轮比赛中,参赛者都是成对的,两两比赛。输者将被淘汰,赢者将自动晋级到下一轮比赛中。比赛一直进行到只剩一个人为止,这个人就是冠军。 
在一轮比赛中,如果比赛人数不是偶数,那么将随机选择一个参赛者自动晋级下一轮,而其它人还是一对一地完成本轮比赛。赛会组织方想知道要产生冠军需要进行多少轮比赛。

Input

参赛的人数N( 1 <= N <= 1000000 )。

Output

比赛需要的总轮数。

Sample Input


15
Sample Output


4
Source
*/ 
int main()
{
    int n=0;
    int count=0;
    scanf("%d",&n);
    while(n>1)
    {
        if(n%2==0)//如果是偶数,则淘汰一半 
        {
            n/=2;
        }
        else//如果是奇数 
        {
            n-=1;//一人不用比赛 
            n/=2;//剩下的人淘汰一半 
            n+=1;//不用比赛的那个人自动进阶 
        }
        count++;//次数加一 
    }
    printf("%d",count);

    return 0;
}
我们来一步一步分析: ### 问题: “全国单人PK” 这个字符串是否超过了 `VARCHAR(10)` 的限制? --- ## ✅ 答案:**是的,超过了!** ### 原因如下: - 字符串内容:`全国单人PK` - 总共包含 **7 个汉字 + 2 个英文字母(P、K)** = **9 个字符** - 虽然只有 9 个字符,但: - 在 SQL Server 中,`VARCHAR(10)` 表示最多存储 **10 个字节(bytes)** - 如果使用的是 **非 Unicode 编码(如 Chinese_PRC_CI_AS)**,中文通常以 **GBK 编码** 存储 - 每个中文字符占 **2 个字节** - 每个英文字符占 **1 个字节** --- ### 🔢 字节计算: | 字符 | 类型 | 字节数 | |------|------|--------| | 全 | 中文 | 2 | | 国 | 中文 | 2 | | 单 | 中文 | 2 | | 人 | 中文 | 2 | | P | 英文 | 1 | | K | 英文 | 1 | | | 中文 | 2 | | **总计** | — | **12 字节** | 👉 所以整个字符串 `"全国单人PK"` 需要 **12 字节** 存储空间。 而字段定义为 `VARCHAR(10)` → 最多允许 **10 字节** ✅ 结论:**超出了 2 个字节** → 插入时会触发: > `String or binary data would be truncated.` --- ## 📌 正确解决方案 ### ✔️ 方案一:修改数据库字段长度(推荐) ```sql ALTER TABLE arena_events ALTER COLUMN name VARCHAR(50); -- 改成能容纳更多中文的长度 ``` 或者如果是 `topic` 字段: ```sql ALTER COLUMN topic VARCHAR(200); ``` 这样就不会再因为中文导致截断。 --- ### ✔️ 方案二:使用 NVARCHAR(更合适处理中文) `NVARCHAR` 使用 Unicode 编码(UTF-16),每个字符固定占 **2 字节**,支持多语言。 ```sql ALTER COLUMN name NVARCHAR(50) ``` 此时: - `"全国单人PK"` 是 9 个字符 × 2 字节 = 18 字节,在 `NVARCHAR(50)` 内完全容纳(最多支持 50 个字符) - 推荐用于所有含中文的字段! --- ### ❌ 不推荐做法 不要依赖静默截断(如关闭 `ANSI_WARNINGS`),会导致数据丢失且难以排查。 --- ## ✅ 建议标准实践 | 场景 | 推荐类型 | |------|----------| | 纯英文/数字 ID | `VARCHAR(n)` | | 含中文的名称、标题、描述等 | `NVARCHAR(n)` | | 最大长度预估 | 至少 `NVARCHAR(100)` 起步,重要字段可到 `NVARCHAR(500)` | 例如: ```sql name NVARCHAR(100) NOT NULL, topic NVARCHAR(500), channel VARCHAR(50) -- 渠道一般为英文代码 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值