题目名称:山洞珍宝
题目描述
在一端山路中,有一个神秘的山洞。这个山洞里有许多神奇的宝藏。 你在山洞外发现了一个奇怪的墙壁,上面有一个神秘的符号,你需要通过一定的方法来解码这个符号,只有解码这个符号后你才能进入这个山洞。 经过一番推导,你发现这个符号是一个由 0 和 1 组成的字符串,每个字符都有一个权值,分别是 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9。 你需要从这个字符串中找到一个最大的子串,使得该子串的权值之和最大。 给定一个字符串 S S S,其长度不超过 1 0 5 10^5 105,且只包含字符 ‘0’ 和 ‘1’。 请你找到字符串 S S S 中权值和最大的子串。
输入描述:
第一行包含一个字符串 S S S。
输出描述:
输出一行,包含一个整数,表示最大的子串的权值和。
示例
输入 0110100110110100
输出 35
完全不知道题目是什么意思,示例也没有解释
题目名称:鬼画符门之大师兄恋爱(分组统计)
题目描述
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量。 往年一直是大师兄管理。 但是大师兄谈恋爱了!!怎么能让这种事耽误自己恋爱时间呢!! 鬼艺接手了!! 你能帮鬼艺写一个程序帮助她统计每年消耗数量最多的鬼画符吗?
输入描述:
第一行输入整数n.(1<=n<=1000) 以下n行输入n个字符串。
输出描述:
输出答案字符串。
示例
输入
5
red
red
green
grenn
hen
输出
red
题目并不复杂,简单点可以使用C++中map容器进行统计
还可以先使用qsort排序,这样相同的放在一起好统计
有个问题,最多的有多个该怎么显示
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void*a,const void*b)
{
char**pa=(char**)a;
char**pb=(char**)b;
return strcmp(pa[0],pb[0]);
}
void solution(int n,char** words )
{
// TODO: 请在此编写代码
for (int i=0;i<n;i++)
{
//printf("%sn",words[i]);
}
qsort(words,n,sizeof(char**),cmp);
char*maxstr=NULL;
int maxlen=0;
char*tmpstr=words[0];
int tmplen=0;
for (int i=0;i<n;i++)
{
if(strcmp(tmpstr,words[i])==0)
{
tmplen++;
} else
{
if(tmplen>maxlen)
{
maxstr=tmpstr;
maxlen=tmplen;
}
tmpstr=words[i];
tmplen=1;
}
}
if(tmplen>maxlen)
{
maxstr=tmpstr;
maxlen=tmplen;
}
printf("%s",maxstr);
}
int main()
{
int n;
scanf("%d", &n);
char** words;
words = (char**)malloc(n * sizeof(char**));
for (int i = 0; i < n; i++)
{
words[i] = (char*)malloc(sizeof(char)*1024);
memset(words[i],0,sizeof(char)*1024);
}
for (int i = 0; i < n; i++)
{
scanf(" %s", words[i]);
}
solution(n, words);
return 0;
}
C++使用map容器如下
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, int> h;
int n, s = 0;
string a, ans;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a;
++h[a];
}
for (map<string, int>::iterator it = h.begin(); it != h.end(); ++it) {
if (it->second > s) {
s = it->second;
ans = it->first;
}
s = max(s, it->second);
}
cout << ans << endl;
return 0;
}
题目名称:等差数列(数学)
题目描述
一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…)的数列。在这个问题中a是一个非负的整数,b是正整数。 现给出三个整数,分别表示等差数列的第一项a、最后一项和公差b,求该数列的和。
输入描述:
输入三个整数,之间用空格隔开。第1个数作为首项,第2个数作为末项,第3个数作为公差.
输出描述:
输出占一行,包含一个整数,为该等差数列的和。如果所给三个整数,不能构成等差数列,则返回-1。
示例
输入 2 11 3
输出 26
首项,末项,公差都有了,可以求出项数,
根据公式就行了,这里要判断是不是等差数列
#include <stdio.h>
#include <stdlib.h>
void solution(int arr[3])
{
int n=(arr[1]-arr[0])/arr[2];
if(arr[0]+n*arr[2]!=arr[1])
{
printf("-1");
} else
{
printf("%d",(arr[0]+arr[1])*(n+1)/2);
}
}
int main()
{
int arr[3];
for (int i = 0; i < 3; i++)
{
scanf("%d", &arr[i]);
}
solution(arr);
return 0;
}