GESP C++三级样题
B3848 [GESP样题 三级] 逛商场
题目描述
小明是个不太有计划的孩子。这不,刚到手的零花钱,就全部拿着逛商场去了。
小明的原则很简单,见到想买的物品,只要能买得起,就一定会买下来之后才会继续往前走;如果买不起就直接跳过。
一天下来,小明到底买了多少物品呢?
输入格式
输入共 333 行:
第一行是一个整数 NNN,表示商场中共有 NNN 种小明想买的物品(1≤N≤1001≤N≤1001≤N≤100);
第二行共有 NNN 个整数,分别表示小明先后见到想买的物品的价格;
第三行是一个整数 XXX,表示开始时小明共有 XXX 元零花钱。
输出格式
输出 111 行,包含一个整数,表示小明买到的物品数。
输入输出样例 #1
输入 #1
6
7 5 9 10 7 4
30
输出 #1
4
说明/提示
数据范围:
对于 100%100\%100% 的数据满足 1≤N≤1001≤N≤1001≤N≤100 且 0≤ai≤1000000\le a_i \le 1000000≤ai≤100000。
#include <iostream>
using namespace std;
int main(){
int n,x;//n种物品,x元零花钱
int price[100];//物品价格数组
cin>>n;
for(int i=1;i<=n;i++){cin>>price[i];}
cin>>x;
int ans=0;//记录物品数
for(int i=1;i<=n;i++){//遍历价格数组
if(price[i]<=x){//如果当前物品价格小于等于零花钱数
x-=price[i];//零花钱数减去物品价格,代表买下了此物品
ans++;//买到的物品数+1
}
}
cout<<ans<<endl;//输出答案
return 0;
}
B3849 [GESP样题 三级] 进制转换
题目描述
小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用 A
表示 101010、F
表示 151515。如果扩展到用 Z
表示 353535,岂不是可以表示 363636 进制数了嘛!
所以,你需要帮助她写一个程序,完成十进制转 RRR 进制(2≤R≤362\le R\le 362≤R≤36)的工作。
输入格式
输入两行,第一行包含一个正整数 NNN,第二行包含一个正整数 RRR,保证 1≤N≤1061\le N\le 10^61≤N≤106。
输出格式
输出一行,为 NNN 的 RRR 进制表示。
输入输出样例 #1
输入 #1
123
25
输出 #1
4N
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string decimalToBaseR(int N,int R){
string result="";
string digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while(N>0){
int remainder=N%R;
result+=digits[remainder];
N=N/R;
}
reverse(result.begin(),result.end());
return result;
}
int main(){
int N,R;
cin>>N>>R;
string res=decimalToBaseR(N,R);
cout<<res<<endl;
return 0;
}