day7:数字串处理、公式求解、累加式

数字串处理

问题描述

明明的爸爸经常对明明进行数学启蒙教育。有一天他和明明做了一个游戏,对一串数字进行处理。明明的爸爸首先给明明一串数字,在这串数字中有很多数字会连续重复出现很多次,爸爸就要求明明把其中连续重复出现次数最多的那个数字找出来。如果有很多个数字连续出现的次数相同,即重复出现次数最多的数字不止一个,那就要明明找出第一次出现该重复次数的那个数字。 例如有一串数字:2 2 2 1 1 1,其中2出现了3次,1也出现了3次,而明明要找出的那个数字是2,因为2是第一次重复出现3次的那个数字。 明明的爸爸现在已经设计好了很多组这样的数据,但是他不想自己来寻找,他想让你帮他写一个程序,找出出现次数最多的那个数字,然后他手中就有一份标准答案,可以用来检查明明到底做得对不对。 明明爸爸的问题可以归结为:给你一串数字,找出在这串数字中连续出现次数最多的那个数字;若有多个数字连续出现的次数相当,则找出第一次出现该次数的那个数字。

个人总结:刚开始看到这道题刷刷写完了结果测试不通过,才发现题干明确指示:连续重复

1. 满足连续重复,需要进行前后数对比,不通过则重置count,然后与最大max_count进行比对,若符合条件则更新最大出现次数的值以及最大次数

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

int main() {
	int n;
	while(cin >> n){
		vector<int> num;
		while(n--){
			int x;
			cin >> x;
			num.push_back(x); 
		}
		int count = 1;
		int max_times = 1;
		int mc_num = *num.begin() ;
		for(int i = 1;i < num.size() ;i++){
			if(num[i] == num[i-1]){
				count ++;
				if(count > max_times){
					max_times = count;
					mc_num = num[i];
				}
			}
			if(num[i] != num[i-1]){
				count = 1;
			}
		}
 		
		cout << mc_num << " " << max_times << endl;
	}
	
    return 0;
}

公式求解

问题描述

明明刚上初中,数学课上老师教了平方的概念,即两个相同的数相乘可以表示为这个数的平方:a×a = a 2。明明觉得这很有趣,就开始研究起来,很快掌握了这个知识点。但是在一次考试中,明明遇到了一个难题,题目的要求是有四个正整数a、b、x、y,他们各自的平方数组成了一个等式a2 + x2 = b2 + y2,现在已知a和b,请求出所有小于等于100的x、y,来满足这个等式。例如给你a=2、b=5,我们可求出的解是x=5、y=2和x=11、y=10。 明明虽然明白了题目的意思,但是要自己求解却显得相当困难。他想了很久也没有能够解出这道题目。放学回家就开始问他的爸爸,他爸爸虽然对数学很精通,但是也无法一时给出正确的答案,于是他就求助于你,帮他解决这个问题。 明明的问题可以归结为:给定两个正整数a、b,求所有的正整数x和y,使a2 + x2 = b2 + y2,其中a、b、x、y都不大于100。在所有的有效解中,按x的大小进行排序,从小到大输出。

个人总结

1. 将x,y分别从1-100遍历,满足条件记录并且输出即可。

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main() {
    int a,b;
    int x,y;
    cin >> a >> b;
    while(a != 0 && b != 0){
    	
    	for(x=1;x<=100;x++){
    		for(y=1;y<=100;y++){
    			if((a*a + x*x) == (b*b + y*y)){
    				cout << x <<" " << y << endl;
				}
			}
		}
    	
    	cout << endl;
    	cin >> a >> b;
	}
    
    return 0;
}

累加式

问题描述

累加式对于明明来说是一个全新的概念,他在数学课上第一次听到了这个名词。可是明明在课堂上并没有完全明白,于是回家后明明就问他爸爸什么是累加式。明明的爸爸是一位数学家,自然对累加式非常熟悉,告诉明明:“累加式是一种表达式,这种表达式的构成方法是这样的:从1开始加,其后的每一个数都比前一个数大1,然后加到某一个数后停止递增,之后每加的一个数都比前一个数小1,一直加到1为止,这样构成的一个表达式称为累加式。 例如1+2+3+4+3+2+1就是一个累加式,它从1开始加到4,然后再加到1,完成累加的过程。”明明对他爸爸的回答相当满意,于是想构造更多的累加式出来,可是明明又不想过于辛苦,他来求助于你,帮他写一个程序,完成累加式的构造。 明明的问题可以归结为:给你一个正整数n,完成从1到n再到1的累加式的构造。

个人总结

1. 本题关键在于格式的输出,很简单。定义一个bool first,判断是否是第一个数,第一个数前不用输出“+”,然后将first赋值false,后续输出前都需要输出“+”

2. 还需要从1到n,从(n-1)到1循环输出

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main() {
    int n;
    int i,j;
    while(cin >> n){
    	
    	for(i=1;i<=n;i++){
    		if(i != n){
    			cout << i << "+";
			}
			else{
				cout << i;
			}
		}
    	
    	for(j=n-1;j>=1;j--){
    		
    			cout << "+" << j;
		
		}
		
		cout<<endl;
    	
	}
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值