数字串处理
问题描述
明明的爸爸经常对明明进行数学启蒙教育。有一天他和明明做了一个游戏,对一串数字进行处理。明明的爸爸首先给明明一串数字,在这串数字中有很多数字会连续重复出现很多次,爸爸就要求明明把其中连续重复出现次数最多的那个数字找出来。如果有很多个数字连续出现的次数相同,即重复出现次数最多的数字不止一个,那就要明明找出第一次出现该重复次数的那个数字。 例如有一串数字: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;
}

686

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



