前言
推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下
「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd=6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷App,查看更方便」
希望有大神能够提供改良意见,敬礼!
---------------------------------------------------------------------------------------------------------------------------------
题目
【题目描述】
【输入格式】
【输出格式】
【样例 1 输入】
15 32767
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
【样例 1 输出】
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
【样例 1 解释】
【样例 2 输入】
4 0
2 3 2 5
【样例 2 输出】
0 0 0 0
【样例 2 解释】
【样例 3 输入】
7 23333
3 5 20 10 4 3 10
【样例 3 输出】
2 2 15 7 3 1 0
【样例 3解释】
【子任务】
思路分析:
本题的思想比较简单,主要通过对演示3的解析得到结论,c[i]是可以通过输入的a[i]直接计算得到,使用m除c[i-1],得到的除数作为b[n+1-i],余数则作为m新的值,由于b[i]是倒序赋值的,需要单独搞出来去输出。
其中abc分别有一个多余的元素,对ab来说,0号是多余的,但是为了方便理解和使用,选择与现实中的题目序号保持一致。而c的最后一个值是多余的,计算的时候直接使用-1来忽略。
代码如下:
#include <bits/stdc++.h>//万能头文件
using namespace std;
//运行结果为nan 表示 not a number 一般都是运算出了逻辑错误,比如除了0
int main() {
int n=0;//n是题目的个数(0.1.2.3.4.n)
int m=0;//最终的密码(被解析的数)被除数
//int result=0;
//const int N=10000;
cin>>n>>m;
int a[n+1]; //数组,存储数据 ,存储每道题的选项个数
int c[n+1];
int b[n+1]; //存储结果
c[0]=1;
for(int i=1;i<n+1;i++){//输入
cin>>a[i];
c[i]=c[i-1]*a[i];//计算出ci(最后有个c[i]是无用的数据,之后要做限制)
}
for(int i=1;i<n+1;i++){
b[n+1-i]=m/c[n-i];//算出结果,从后往前填入 ,b[i]取除数
m=m%c[n-i];//m取余
}
for(int i=1;i<n+1;i++){
cout<<b[i]<<" ";//正序输出
}
return 0;
}