编程题练习Day12+计算机英语翻译练习Day5
编程题练习

一、繁殖问题
章节: 一维数组
问题描述
有一家生化所,一月份引入一对新生的小白鼠。这对小白鼠生长两个月后,在第三、第四、第五个月各繁殖一对新小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖。问在第N个月时,活的小白鼠有多少对?
输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成,其中只有一个整数N(0 < N ≤ 50)。两组输入数据间无空行。
输出说明
对于每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)输出一行,其中只有一个整数,即第N个月时活的小白鼠有几对,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
输入范例
1
2
3
4
5
6
7
8
30
输出范例
1
1
2
3
5
7
10
15
67066
问题作答
完整代码
#include
using namespace std;
int main()
{
int n;
int born[51] = {0};
int total[51] = {0};
born[1] = 1; total[1] = 1;
born[2] = 0; total[2] = 1;
born[3] = 1; total[3] = 2;
born[4] = 1; total[4] = 3;
born[5] = 2; total[5] = 5;
born[6] = 2; total[6] = 7;
for (int i = 7; i <= 50; i++)
{
born[i] = born[i-2] + born[i-3] + born[i-4];
total[i] = total[i-1] + born[i] - born[i-6];
}
while (cin >> n)
cout << total[n] << endl;
}
运行范例

个人总结
1.本题属于动态规划,小白鼠会在第三、四、五个月生产新的小白鼠,在第七个月死亡,生命周期为六个月
2.born[i] = born[i-2] + born[i-3] + born[i-4];当月出生的小白鼠来源于两个月、三个月、四个月前出生的小白鼠。total[i] = total[i-1] + born[i] - born[i-6];当月存活的小白鼠来源于上个月存活的小白鼠,加上当月出生的小白鼠,减去六个月前出生的小白鼠
3.当到了第七个月,第一对小白鼠死亡,递归完成闭环,题目输入的n在1到50之间,一次递归得到前50个月的每月存活信息后,输入n,进行查询即可,不需要每输入n就进行递归
二、奇妙的数字
章节: 一维数组
问题描述
有一种自然数,它的各位数字之和能被17整除。这个数的后继数(即这个数加1)的各位数字之和也能被17整除。求所有自然数中,从小到大第n个这样的数。
输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,其中仅有一个整数n(1≤n≤10)。在行首和行尾没有多余的空格。所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
输出说明
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。每组答案占一行,每行中仅有一个整数,即题目描述中的第n个数。在行首和行尾不要输出多余的空格。在所有数据的前后,以及两组数据之间不要输出多余的空行。
输入范例
1
3
输出范例
8899
17899
问题作答
完整代码
#include
using namespace std;
int main()
{
int n, last = 0, t = 1;
int num[11] = {0};
for(int i = 8899; t <= 10; i++){
int sum = 0;
int m = i;
while(m){
sum += m % 10;
m /= 10;
}
if(sum % 17 == 0){
if(i - last == 1){
num[t] = last;
t++;
}
last = i;
}
}
while(cin >> n)
cout << num[n] <
运行范例

个人总结
1.本题要求连续两个自然数的每位数之和都可以被17整除,找到所有自然数中,从小到大第n个这样的数(连续两个数中的前者)
2.首次编译本题时,思考到:如果没有产生进位,不可能连续两个自然数的每位数之和都可以被17整除。所以这个数的末尾一定是9,拆分为个位和剩下的位数,即剩下的位数和为8,此时不考虑剩下的位数的情况下,后继数可拆分为个位为0、剩下的位数和为9,不符合题意。考虑将这个数拆分为十+个位和剩下的位数,即末尾是99,剩下的位数和为16,不考虑剩下的位数进位的情况下,后继数可拆分为十+个位为00、剩下的位数和为17,符合题意。结果仅有一个测试用例通过,发现遗漏了剩下的位数进位的情况,如16999的每位数之和可以被17整除,17000的每位数之和不可以被17整除。
3.最后编译时,从小到大逐个遍历找出自然数中前10个这样的数,输入n,进行查询即可
三、整除的尾数
章节: 函数
问题描述
一个整数,只知道前几位为a,不知道末二位,被另一个整数b除尽了(即没有余数),那么该数的末二位该是什么呢?
程序已完成主体框架,请完成以下函数getResult的函数体。
getResult的功能为:
根据传入的参数a和b,求出所有符合条件的末二位(尾数)放入数组weishu中,数组weishu按升序排列。函数返回符合条件的尾数个数。
部分代码如下:
//以下代码可自行修改成C++代码
#include
int getResult(int a, int b, int weishu[])
{
//请完成此函数
}
int main()
{
int a, b, weishu[100],count,i;
scanf("%d%d", &a, &b);
count=getResult(a,b,weishu);
for(i=0; i { if (i>0) printf(" "); printf("%02d", weishu[i]); } printf("
"); return 0; }
输入说明
输入两个整数a,b(0
输出说明
将满足条件的所有尾数在一行内输出,格式见范例。两个尾数之间空一格,行首与行尾没有空格。
输入范例
输出范例
08 20 32 44 56 68 80 92
问题作答
完整代码
#include
#include
using namespace std;
int getResult(int a, int b, int weishu[])
{
int m = a * 100;
int n = 0;
for(int i = 0; i < 100; i++){
if((m + i) % b == 0){
weishu[n] = i;
n++;
}
}
return n;
}
int main()
{
int a, b, weishu[100],count,i;
cin >> a >> b;
count = getResult(a,b,weishu);
for(i=0; i0)
cout << " ";
cout << setw(2) << setfill('0') << weishu[i];
}
cout << endl;
return 0;
}
运行范例

个人总结
1.Day8的第二题同样是整除的尾数,当时使用的是vector,但本题要求完成以下函数getResult的函数体,因此需要根据要求增加数组为参数,返回数组大小
2.题目中原函数为C语言,如果不导入#include
翻译练习
第一段
原文

译文
在过去图灵测试(由艾伦 图灵在1950年提出)一直被用作衡量人工智能领域发展的基准。如今图灵测试的重要性减弱了,尽管它仍然是人工智能传说的重要组成部分。图灵的提议是允许一个人类参与,我们称为审问者,通过打字机和测试对象进行交流,然而没有告知测试对象是人类还是机器。在这种环境下,如果审问者无法将其和人类区分开来,那么机器将被宣布具有智能。图灵预测在2000年机器将有百分之三十的机会通过五分钟的图灵测试--事实证明这一猜测出人意料的准确。
第二段
原文

译文
图灵测试不再被认为是衡量智能的有效方法的原因之一是,一种看似具备智慧的怪异形象可以相对容易地被营造出来。一个著名的例子是由约瑟夫 维森鲍姆在 20 世纪 60 年代中期开发的 DOCTOR 程序(通用系统 ELIZA 的一个版本)产生的。这个交互式程序旨在呈现罗杰斯式分析师进行心理访谈的形象;计算机扮演分析师的角色,而用户扮演病人。DOCTOR 在内部所做的就是根据一些明确界定的规则重新构造病人的陈述,并将它们反馈给病人。例如,在回应“我今天很累”的陈述时,DOCTOR 可能会回答“你为什么觉得你今天很累?”如果 DOCTOR 无法识别句子结构,它只会回答“继续”或“这很有趣”。
第三段
原文

译文
维森鲍姆开发 DOCTOR 的目的是研究自然语言交流,心理治疗只是提供了一个环境,让程序可以“交流”。然而,让维森鲍姆感到沮丧的是,几位心理学家提出使用该程序进行实际心理治疗。(罗杰斯的论点是,在治疗过程中,应该由病人(而不是分析师)主导讨论,因此,他们认为,计算机可以像治疗师一样进行讨论。)此外,DOCTOR 投射出一种理解的形象,以至于许多与它“交流”的人屈从于机器的问题和答案对话。在某种意义上,DOCTOR 通过了图灵测试。结果是,伦理和技术问题被提了出来,维森鲍姆成为在技术进步的世界中维护人类尊严的倡导者。








