Oj之路(第二天)
来源:互联网 发布:php个人文件管理 编辑:程序博客网 时间:2024/05/01 15:03
今天第二天,觉得自己从题目中获取的东西不少,所以对编程题目也比较越来越有兴趣--这是个不错的开端,所以希望自己能继续玩下去。
接下来看一道又是用到“记忆搜索”思想的题目吧----继续吐槽一遍,这”记忆搜索“真是高大上~希望能加深领悟这种思想。
=======================================================================================================
题目描述:
从键盘输入一个自然数K(99999999>K>1),若存在自然数M和N(M>N),使得K的M次方和K的N次方均大于或等于1000,
且它们的未尾三位数相等,则称M和N是一对“K尾相等数”。请编程序,输出K尾相等数中M+N最小值。
输入样例
2
输出样例
120
=======================================================================================================
思考过程:
首先,观察易知用直接k的m次方和k的n次方进行判断是不科学的,题目要求判断的只是”末尾三位数“,所以我们只要取k的m次方和k的n次方
的末尾三位数即可--取余1000即可。
”记忆搜索“思想的体现:
每次我们判断的时候都会用到之前用过的末尾三位数--重复使用之前的结果。
所以这里我们用一个数组来保存”x次幂的值“的末尾三位数,之后判断的时候直接拿来用就好了
=========================================================================================================
源代码:
#include <stdio.h>#include <math.h>int tail[1000];//用来记录k的x次幂的末尾三位数int findMin(int k) {for (int i = 1;; ++i)if (pow((double)k, i) > 1000)return i;}int main(){int k;scanf("%d", &k);int min = findMin(k);//findMin函数用来找出最小的i幂,使得k的i次幂大于等于1000,因为再小的幂我们用不到 tail[min] = (int)pow((double)k, min) % 1000;for (int i = 2 * min + 1;; ++i) {int m = i - min, n = min;tail[i - min] = tail[i - min - 1] * k % 1000;//记忆搜索的体现for (; m > n; m--, n++) {if (tail[m] == tail[n]) {//记忆搜索的体现printf("%d\n", m + n);return 0;}}}}=========================================================================================================
- Oj之路(第二天)
- oj之路(第二天)(由题目看思想)
- Java学习之路(第二天)
- 【北大OJ第二题】Exponentiation(C++)
- Java之路第二天
- OJ嘻唰唰第二批之成绩统计
- OJ之路(第一天)
- Oj之路(第三天)
- leetCode OJ 第二题
- PHP自学之路------HTML(第二天)
- PHP自学之路-----DIV+CSS(第二天)
- html学习之路——第二天(1)
- 我的Java之路 第二天
- php学习之路第二天
- 找实习生工作之路第二天
- 北上之路-第二天
- orcle学习之路第二天
- 上海求职之路第二天
- 一个文本抽取分析的shell程序
- Intel Threading Building Blocks 之 并行循环
- XML学习记录(一)
- HTTP POST GET详解
- 仿函数
- Oj之路(第二天)
- usb挂载一定要延时才能多次挂载
- java学习论坛
- Struts1 标签库说明
- C++ primer中 重载箭头操作的错误 第四版 445页 14.6节
- 关键字 explicit
- 如何修改NSTableview中的cloumn数量,Cell的高度,宽度等属性
- 星星之火,可以燎原!------------完整的ubuntu镜像源/本地源/更新源/离线升级包!制作总结
- [蓝桥杯历届题目] 正六面体染色 ; 取字母组成串