《ACM程序设计》书中题目 T

题目简要:
给定正整数B和N,找到一个整数A,使得AN尽可能接近B.(结果A是B的第N个根的近似值)。注意,AN可以小于,等于或大于 比B.

输入:输入由B和N的一对或多对值组成。每对出现在单个行上,由单个空格分隔。 指定B和N的值零的线标记输入的结束。 B的值在1至1,000,000(包括)的范围内,N的值在1至9(包括1和9)的范围内。

输出:对于输入中的每对B和N,如上定义的输出A本身在一行上。

例如:
Example Input:Example Output:
4 3
5 3
27 3
750 5
1000 5
2000 5
3000 5
1000000 5
0 0
1
2
3
4
4
4
5
16



解题思路:

  这道题其实只需要解决开根号的问题就好了,将b开n次根,取到double型的a,然后在判断,哪一个是更接近的整数。
基本思路还是比较容易的,只是在一开始开根号是不知如何是好。不过后来发现其实开n次根,其实就是1/n次方,所以用pow直接就可解决。

附代码:

#include<bits/stdc++.h>      
using namespace std;
int main()
{
vector<int>s;
int A1,A2,b,n,i;
double a;
while(cin>>b>>n&&b!=0&&n!=0)
{
a=pow(b,1.0/n);
A1=a;
A2=a+1;
if(fabs(b-(pow(A1,n)))>fabs(b-(pow(A2,n))))
    s.push_back(A2);
else
s.push_back(A1);
}
for(i=0;i<s.size();i++)
{
cout<<s[i]<<endl;
}
return 0;
}

解题感受:

  这是我第一次一次提交就A,感觉很兴奋,收获就是需要拓展思维,不能拘泥。要习惯从多个角度看问题。这是3月10号的第一道题,其实已经晚上11点了·····由于白天满课实在没有时间,只好晚上打了···
### ACM程序设计竞赛题目及测试用例 #### 题目一:重复 (桂林电子科技大学第三届ACM程序设计竞赛)[^1] **问题描述**: 编写一个程序,验证其功能是否满足特定需求。注意,自测数据通过并不代表所有测试用例都能通过。 **输入/输出说明**: 无具体输入输出定义,需自行构建测试用例来验证逻辑正确性。 **样例测试用例**: 假设该问题是关于判断某个算法的时间复杂度空间复杂度,则可以设置如下测试用例: ```plaintext 输入: 无固定格式 输出: 恭喜!您提交的程序通过了你的自测数据。(运行时间:5ms,内存占用:3m) ``` --- #### 题目二:蹦床游戏 (北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛题解)[^2] **问题描述**: 给定一组蹦床数量 `T` 每个蹦床的弹力数组 `b_i`,计算某种条件下可能的结果。 **输入/输出说明**: - **输入**: 第一行包含正整数 `T` 表示测试用例个数;接下来每一组测试用例的第一行为蹦床数量 `n`,第二行为对应的弹力列表。 - **输出**: 按照题目要求返回结果。 **样例测试用例**: ```plaintext 输入: 2 3 1 2 3 4 4 5 6 7 输出: <按照题目要求的具体实现> ``` 此部分需要进一步明确具体的求解目标才能提供完整的解答。 --- #### 题目三:简单问题 (湖南大学第十四届ACM程序设计大赛)[^3] **问题描述**: 给出一个正整数 `x` 若干数字组成的集合 `{a_1, a_2,...,a_k}`,找出最小的一个正整数 `y`,使得它既是 `x` 的倍数又包含了所有的指定数字。 **输入/输出说明**: - **输入**: 组测试用例,每组测试用例由两行组成——第一行两个整数 `x` `k`,分别代表倍数所需数字的数量;第二行为这些数字本身。 - **输出**: 对应每一个测试用例输出符合条件的最小正整数 `y` 者无法找到这样的数则输出 `-1`。 **样例测试用例**: ```plaintext 输入: 2 12 2 1 2 15 3 1 2 3 输出: 12 1230 ``` 解释:第一个例子中,`12` 是自己本身的倍数并含有字符 `'1'` `'2'`;第二个例子中,`1230` 能够被 `15` 整除同时也具备所列全部字符。 --- #### 题目四:字符串去重计数 (桂林电子科技大学第三届ACM程序设计竞赛)[^4] **问题描述**: 对于任意给定的一段字符串 S,统计其中不同子串的数量。 **输入/输出说明**: - **输入**: 单独一行字符串 S。 - **输出**: 唯一的不同子串总数。 **样例测试用例**: ```plaintext 输入: abc 输出: 6 ``` 解析过程可借助动态规划者后缀自动机等高级技术完成。 --- ### 实现代码片段 以下是针对最后一个字符串去重计数问题的一种解决方案: ```python def count_unique_substrings(s): n = len(s) seen = set() for length in range(1, n + 1): # 子串长度从1到n变化 for start in range(n - length + 1): substring = s[start:start + length] seen.add(substring) return len(seen) if __name__ == "__main__": string_input = input().strip() # 获取用户输入 result = count_unique_substrings(string_input) print(result) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值