1190:上台阶

【题目描述】楼梯有n(71>n>0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法。【输入】输入的每一行包括一组测试数据,即为台阶数n。最后一行为0,表示测试结束。【输出】每一行输出对应一行输入的结果,即为走法的数目。【输入样例】12340【输出样例】1247【来源】No题解首先根据题目给出的数字推理一下用草稿写一下5个台阶 只走1、2、3步有多少种可能,很快就会明白了。这是我算出来的!然后有没有发现规律。i=1 sum=1i=2 sum=2i=3 sum=4i>3 sum=a[i-1]+a[i-2]+a[i-3]参考代码:#include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() { long long a[71] = {0}; a[0] = 1; a[1] = 2; a[2] = 4; int n; ...

归并排序

归并排序核心:分解 合并首先了解它是如何合并元素就很容易去了解这个算法分解步骤:数组两边都是有序的子数组,然后需要把他们拆分开合并的步骤:1、定义三个变量 i、j、k i指向Arr1的第一个元素 j指向Arr2的第一个元素 K指向 数组第一个元素2、让arr1[i]和arr2[j]比较大小 顺序取小 逆序取大3、如果arr1[i]<arr2[j] 就把arr1[i]这个元素放在arr3[3]里面4、然后维护一下下标 如果取arr1[i]元素 i++ 如果取arr2[j]元素 j++ 然后k因为也添加元素了维护一下 k++往后移完事!!!!但是 别忘了 这是两边排序好的。 如果是顺序乱的呢(当然是排序啦1、首先分解 把他分解成还剩一个元素 再合并。(只有一个元素 当然是排序好的了)代码示例:#include<iostream> #include<algorithm> #include<cstring> using namespace std; /*合并*/ void merger(int arr[],int L,int M,int ...

1309:【例1.6】回文数(Noip1999)

【题目描述】若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87,STEP1: 87+78= 165 STEP2: 165+561= 726STEP3: 726+627=1353 STEP4:1353+3531=4884在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。写一个程序,给定一个N(2<N<=10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。【输入】给定一个N(2<N<=10或N=16)进制数M。【输出】最少几步。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible”。【输入样例】9 87【输出样例】6【来源】No#include<iostream> #include<algorithm> #include<cstring> using namesp...

1170:计算2的N次方

【题目描述】任意给定一个正整数N(N≤100),计算2的n次方的值。【输入】输入一个正整数N。【输出】输出2的N次方的值。【输入样例】5【输出样例】32【来源】No代码:#include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() { int n; cin >> n; int arr[1000] = { 1 }; /*第一个初始值必须为1 因为0乘于任何数都为0*/ int index = 1; for (int i = 0; i < n; i++) { int t = 0; int x = 0; while (t < index) /*每次乘2+进位值*/ { arr[t] = arr[t] * 2 + x; x = arr[t] / 10; ...

1307:【例1.3】高精度乘法

【题目描述】输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。【输入】输入两个高精度正整数M和N。【输出】求这两个高精度数的积。【输入样例】363【输出样例】108【来源】No思路:c[i+j]=a[i]b[j]+x+c[i+j] :ab项+进位+原数参考代码:#include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() { char a1[101], b1[101]; int a[101] = { 0 }, b[101] = { 0 }, c[10000] = {0}; cin >> a1 >> b1; int lena = strlen(a1); int lenb = strlen(b1); for (int i = 0; i < lena; i++) a[lena - i-1 ] = a1[i]-'0';...