构造序列
问题描述
序列是在数学世界中一种非常有趣的数字现象,它通过某一规则来产生数字,使数字变得有趣、变幻无穷。很多数学家对序列这种事物产生了浓厚的兴趣,花了很多时间对其进行研究,明明就是其中的一位。一天,他又在研究一种新的序列产生规则,该序列的规则如下:
1) 第1轮,写出两个1,即11;
2) 第2轮,在它们中间插入2,成为121;
3) 第3轮,在上面数中每两个相邻的和为3的数之间插入3,成为13231;
4) 以此类推下去,第n轮,在第n-1轮的数字的基础上,每两个相邻的和为n的数之间插入n。
明明根据这个规则开始构造序列。开始还觉得容易,但是越到后面,明明发现构造序列的计算量越来越大,计算难度也越来越高,计算速度也越来越慢。于是,明明就求助于你这位程序设计专家,能否帮他写一个程序,构造出序列的前9项,然后当明明需要知道序列中的哪一项的时,你就把那一项的数字告诉明明。
明明的问题可以归结为:根据题目描述中所描述的序列产生规则构造序列的前9项,然后告诉你一个正整数n,要求你输出序列的第n项。
总结
1. 字符 - '0'把数字字符转成整数,数字 + '0'把整数转回字符
2. 预生成 1-9 轮的所有序列,而不是每次输入 n 都重新生成,这个思路很重要
#include <iostream>
#include <string>
using namespace std;
void f(string s[10]) {
s[1] = "11";
for (int i = 2; i <= 9; i++) {
string &a = s[i - 1];
string b;
for (int j = 0; j < a.size(); j++) {
b += a[j];
if (j < a.size() - 1) {
int c = a[j] - '0';
int d = a[j + 1] - '0';
int e = c + d;
if (e == i) {
b += (char)(i + '0');
}
}
}
s[i] = b;
}
}
int main() {
string t[10];
f(t);
int n;
while (cin >> n) {
cout << t[n] << endl;
}
return 0;
}
纯粹合数
问题描述
明明的爸爸是一位数学家,明明受他爸爸的影响从小就喜欢数学,经常向他爸爸学习或请教数学问题。
一天,明明问他爸爸什么是合数,明明的爸爸回答说:“首先,合数都是大于1的整数,其次合数是除了1和其本身外,还能被至少一个其他自然数整除的数,例如‘4’这个数,它除了能被1和4整除外,还能被2整除,因此‘4’就是合数;但是‘3’就不是合数,因为3只能被1和3这两个数整除,因此‘3’不是合数。”
聪明的明明很快就理解了他爸爸的意思,于是又接着问他爸爸:“那什么又是纯粹合数呢?”明明的爸爸接着回答说:“一个合数,去掉最高位,剩下的数是0或仍是合数;再去掉剩下的数的最高位,剩下的数还是0或合数;这样反复,一直到最后剩下的一位数仍为0或合数;我们把这样的数称为纯粹合数。
例如‘100’这个数,它能被1、2、4、5、10、20、50、100整除,因此100是个合数,我们去掉它的最高位,剩下的数是0(其实剩下的应该是00,但是前置0对一个整数来说没有意义,因此前置0被舍去,就剩下个位数上的0),因此‘100’是一个纯粹合数。有趣的是,100是最小的一个三位纯粹合数。
再例如‘104’这个数,104能被1、2、8、13、26、52、104整除,所以104是个合数;我们去掉它的最高位后剩下4,4能被1、2、4整除,所以4也是合数,所以‘104’是一个纯粹合数。
但是‘101’就不是纯粹合数,因为‘101’只能被1和101这两个数整除。”
明明对他爸爸的回答很满意,于是自己动手从100开始寻找纯粹合数,他一共找到了100个纯粹合数,调皮的明明开始反过来考爸爸了,问他爸爸能否告诉他第2个大于等于100的纯粹合数是哪个?第3个大于等于100的纯粹合数又是哪个?……明明的爸爸被这个突如其来的问题给难住了,他无法立刻回答出来,于是请求你的帮助,帮助他回答明明的这个问题。
明明的问题可以归结为:根据一个正整数n,求出从100开始从小到大的第n个纯粹合数。
总结
1. 拆分成了三个函数:判断合数、判断纯粹合数,a()只判断合数,b()只判断纯粹合数,c()只生成结果列表
2. 去掉最高位:先算位数、再算最高位权值、最后取余。
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool a(int x) {
if (x < 2) return false;
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) return true;
}
return false;
}
bool b(int x) {
if (!a(x)) return false;
int y = x;
while (y >= 10) {
int c = 0;
int z = y;
while (z > 0) {
c++;
z /= 10;
}
int d = 1;
for (int i = 1; i < c; i++) {
d *= 10;
}
y = y % d;
if (y != 0 && !a(y)) return false;
}
if (y != 0 && !a(y)) return false;
return true;
}
vector<int> c() {
vector<int> e;
int f = 100;
while (e.size() < 100) {
if (b(f)) {
e.push_back(f);
}
f++;
}
return e;
}
int main() {
vector<int> g = c();
int n;
while (cin >> n) {
cout << g[n-1] << endl;
}
return 0;
}
计算机英语翻译
二、输入硬件
输入硬件由额外(外部的)的设备组成,这些设备在电脑的cpu之外,它给电脑提供了信息和指令。一个发光笔是一个带有发光感应器的stylus,用于去在电脑的视频屏幕上直接画,或者在发光笔上按下按钮(clip夹子)以选择一个在屏幕上的信息,或者用笔按压在屏幕的表面。这支笔包含光学传感器,可以识别它划过了屏幕的哪一个部分。鼠标是一个点击设备,为一只手的抓取而设计。它包含了底部的一个探测设备,能够让用户去控制屏幕中光标的移动,或者叫游标,通过在一个平坦的表面移动鼠标。当设备移动穿过这个表面,光标就可以穿过屏幕,用户按压鼠标上的按钮,就可以选择一个项目或者选择一条屏幕上的指令。joystick是一个指向(指点)设备,由一根lever(杆子)组成,可以在电脑的屏幕上在多种方位移动光标或者其他图形物体。键盘是一个打字机类型的设备,允许用户去输入文本并且命令电脑。一些键盘有特殊的功能键,或者整合入光标设备(集成指点设备),比如trackball或者触控region,让用户的手指可以移动屏幕上的光标
①stylus n.触控笔;尖笔;
②joystick n.操纵杆;游戏手柄;
③trackball n.轨迹球
④region n.区域;地区;
一个opticalscanner(光学扫描仪)使用光学传感器设备,将许多图片转换成比如一张图片或者文本通过电子的信号(将图片和文本等图像转换成计算机可以处理的电子信号),可以被计算机manipulated的。比如,一个摄像照片可以被扫描进计算机,之后被以一个文本的形式记录在计算机内(然后被插入到该计算机上创建的文本文档重)。最寻常的两个扫描类型就是平面扫描(平板式扫描仪),跟办公室内的photocopier很相似,然后就是手持扫描,通常manually across被处理(手动划过待处理的图像)。一个麦克风是一个将声音转换成可以在电脑中被存储、manipulated,并且回放的信息的设备。声音识别模块是一个可以将说出的单词转换成可供电脑辨认和处理的信息的设备。
①manipulate v.处理
②include in 插入
③ photocopier n.复印机
④manually
光猫,stands for modulator-demodulator 是一个可以连接计算机和电话线的设备,能够允许信息被transmitted转化或者接受从另一台计算机中。每一台可以发送或者接受信息的计算机必须连接到一个光猫上。从一台计算机发送的信息被光猫转换成一个音频信号,这个信号之后可以被电话线传递transmitted到接受方光猫,这个光猫会将信号转换成可以背计算机接受并且理解的信息。
①modem n.调制解调器 (猫)
②stanfs for 全称是
③transmit v.传输
单词打卡


559

被折叠的 条评论
为什么被折叠?



