day16:数列1(中)、部落人乘法(中)、按要求输出序列(中)

数列1

问题描述

思维的严密性是相当重要的,尤其是在程序设计中,一个小小的错误,就可能导致无法想象的后果。明明的爸爸是一名富有经验的程序设计专家,深知思维严密的重要性。于是在明明很小的时候,就通过游戏的方式训练明明的思维严密性。今天,明明的爸爸和明明做了一个数列的游戏。

这个游戏很简单,就是有一数列,现在需要在数列中选出一个或者连续若干个数,要求这些数的和能被11整除。明明的爸爸想锻炼明明思维的严密性,因此要求明明尽可能多的找出符合条件的数列来,最好一个也不要漏掉。 例如有一数列为“11 22 33”,其中11可以被11整除,22可以被11整除,33可以被11整除,11+22=33能被11整除,22+33=55能被11整除,11+22+33=66能被11整除。所以以上一数列能被11整除的情况一共有六种。(注:虽然11+33也能被11整除,但是11和33在数列中没有连续出现,因此不算一种合理的情况。) 明明对这个游戏很感兴趣,高兴地玩了起来。由于粗心,明明总是无法一次就把所有的情况都找出来,这使得他爸爸不是很满意。于是明明爸爸决定先降低游戏的难度,事先告诉明明某一数列总共有多少种符合条件的选择数的方法,然后再让明明去选。明明的爸爸请你帮一个忙,他不想自己找出所有的情况,因此请你写一个程序,用程序来找出一共有多少种符合选数的情况,并把结果告诉他。 明明爸爸的问题可以归结为:给你一个数列,从中选出1个或连续若干个数,要求这些数的和能被11整除,问这样的选数方法一共有多少种。

个人总结

1. 用数组记录存入的数值,start记录初始下标,len记录每次遍历所取连续的长度(len不超过size)

2. 与前面的遍历不同,此处不能够循环,若start + len超过size,则需要break

3. 每次sum符合条件都count++

#include <iostream>
#include <vector>
//#include <string>
//#include <cmath>
//#include <algorithm>
//#include <sstream>
using namespace std;

int count_num(int num[],int size){
	int start;
	int count = 0;
	int len;
	int sum;
	for(start = 0 ;start < size ;start++ ){
		for(len = 0 ;len < size ;len++ ){
			if(start + len >= size){
				break;
			}
			sum = 0;
			int i = start;
			do{
				sum += num[i];
			}while(i++ < start+len);
//			for(int i = start; i < start+len; i++){
//				sum += num[i];
//			}
			if(sum % 11 == 0){
				count ++;
			}
		}
	}
	
	return count;

} 

int main() {
    int n;
    while(cin >> n){
    	vector<int> num;
    	while(n--){
    		int x;
    		cin >> x;
    		num.push_back(x); 
		}
    	
    	cout << count_num(num.data() ,num.size() ) << endl;
	}
    
    return 0;
}

部落人乘法

问题描述

明明热爱数学,他的爸爸也有意培养明明对数学的兴趣。

一次,为了拓展明明的知识面,爸爸给明明讲了一个原始部落人计算乘法的方法:

据说原始部落人以小石子作为计算工具,并用减半和加倍两种运算就能求得任何两个整数的乘积。

其规则是:

左边不断除2,写下商,舍去余数;

右边不断加倍,直到左边变成1为止。

取结果的方法是:

如果某行左边是偶数,就划去整个这一行;

如果某行左边是奇数,右边剩下的数相加即可。

例如求13与15的乘积的过程是:

计算过程:

13--------15 :13除以2等于6,舍去余数1,15乘以2等于30;

6---------30 :6除以2等于3,30乘以2等于60;

3---------60 :3除以2等于1,舍去余数1,60乘以2等于120;

1---------120 :左边数字为1,停止计算。

取结果过程:

13--------15 :左边是奇数,取15;

6---------30 :左边是偶数,划去;

3---------60 :取60;

1---------120 :取120;

其结果就是: 13*15=15+60+120=195。

明明对爸爸讲的这个故事相当感兴趣,也自己动手开始模拟上面的过程计算起来。刚开始的时候,明明感觉这样计算很有趣,但是时间一长,明明就觉得这样的计算过程很麻烦。他想让你帮他写一个程序,快速的计算出上述乘法最后相加的式子和结果。

明明的问题可以归结为:给你两个整数,使用上面描述的乘法过程,输出最后的相加的式子。

个人总结

1. 用两个数组left,right记录数值,若left与right同下标,则表示同一列数字,直到left为1,根据条件对right数组处理

#include <iostream>
#include <vector>
//#include <set>
//#include <string>
//#include <cmath>
#include <algorithm>
//#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

int main() {
    int a,b;
    while(cin >> a >> b){
    	vector<int> left;
    	vector<int> right;
		int l,r;
		l = a;
		r = b;
		while(l >= 1){
			left.push_back(l);
			right.push_back(r);
			l /= 2;
			r *= 2; 
		}
		cout << a << "*" << b << "=";
		int sum = 0;
		for(int i = 0;i < left.size(); i++){
			if(left[i] % 2 == 0){
				continue;
			}
			else{
				sum += right[i];
				if(left[i] != 1){
					cout << right[i] << "+";
				}else{
					cout << right[i] << "=";
				}
			}
		}
		
		cout << sum << endl;
	}
	   
}

按要求输出序列

问题描述

明明的爸爸是一位著名的数学家。他在明明很小的时候就发现明明有过人的数学天赋,因此有意培养他对数学的兴趣。一次,明明的爸爸为了培养明明对数字的敏感,和明明玩起了一个数字游戏,这个游戏的名称叫“按要求输出序列”。在游戏中,明明的爸爸给了明明一串数字,要求明明首先把这串数字中重复出现的数字删除到仅剩一个,即相同的数字只保留一个,然后将这串数字从小到大进行排序。明明很快就理解了游戏的规则,开始玩起来。明明的爸爸首先给了明明三个数字:3、2、1;明明很快就回答说:“1、2、3”。明明的爸爸惊讶于明明的反应能力,开始加大游戏的难度,给出了由6个数字组成的数字串:2、1、4、3、5、2;明明眼珠子一转,脱口而出:“1、2、3、4、5”(由于“2”出现了两次,因此要删除一个,然后再排序输出。)。明明的爸爸意识到简单的数字串难不住明明,于是决定给出很长的一串数字串来考明明。但与此同时,明明爸爸面对这很长的数字串也无法一时计算出最后的结果,于是就求助于你,让你帮他写一个程序,用来计算出数字串最后的结果。

明明的爸爸的问题可以归结为:给你一个数字串,里面有n个数字,首先对数字串中的数字进行处理,删除重复出现的数字(重复出现的数字只保留一个),然后对数字串从小到大进行排序,最后输出排序后的字符串。

个人总结

※使用set库:set作为容器,可以自动排序并去除重复项 (查看笔记回顾set容器的定义以及用法),但是set容器不可以随机访问,需要用到迭代器访问(了解是否还有其他的访问方式)

1. 使用vector定义数组,循环插入数值,每插入一个值就判断是否存在重复值,若有直接break进入下一循环,若无,则插入该值

由于我提前初始化了该数组中的值为-1,所以数组中会存在很多-1,我懒得改就直接不遍历-1输出除-1以外其他值,这里其实可以优化

#include <iostream>
#include <vector>
//#include <string>
//#include <cmath>
#include <algorithm>
//#include <sstream>
using namespace std;

int main() {
    int n;
    while(cin >> n){
    	int x;
    	vector<int> num (n,-1);
    	while(n--){	
    		int tag;
    		cin >> x;
    		for(int i=0;i < num.size() ;i++){
    			tag = 1;
    			if(num[i] == x){
    				tag = 0;
    				break;
				}
			}
			
			if(tag){
				num.push_back(x); 
			}
			
		}
		
		sort(num.begin() ,num.end() );
		for(int i = 0;i < num.size() ;i++){
			if(num[i] != -1){
				cout << num[i];
				if(i < num.size() - 1){
				cout << " ";
			}
			}
		}
		
		cout << endl;	
	}
    
    return 0;
}

计算机英语翻译

图灵测试不再被视为一个有意义的衡量人工智能的其中一个原因,就是一个对人工智能eerie的应用可以被相关的ease制造(可以比较容易地生成一种怪异的智能外表)一个广为人知的例子出现(结果产生了一个著名的例子),当项目DOCTOR(更加通用的系统ELIZA的一个版本)的结果被Joseph Weizenbaum发展在1960年中期(20世纪60年代中叶,约瑟夫威森保姆开发了DOCTOR程序)(系称为ELIZA的系统的一个版本,ELIZA比它更通用)。这个interactive (交互)项目为一个Rogerian 分析的图片的项目而设计(这个交互程序旨在呈现一个进行心理访谈的罗杰斯式分析师的形象)

eerie adj.怪异的,神秘的

ease n.容易,不费劲

interactive adj.交互的

单词打卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值