-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path统计回文数.cpp
175 lines (141 loc) · 3.43 KB
/
统计回文数.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*描述
输入一段文本,统计中间出现次数最多的回文数。回文数是类似12321,1221这样,顺序和逆序相同的十进制无符号整数,不考虑符号,长度至少为2,不能以0开始。另外,不考虑数的一部分,即abc1232abc中的232不是一个单独的数。(数据可能超过32位)
输入
输入数据为一段文本,可能包含若干行,直到文件末尾(EOF)为止。即只有一组测试用例。
输出
对于每一组输入数据,输出出现次数最多的回文数和它出现的次数。如果有多个,按从小到大输出,每个数占一行。如果没有, 输出None。
样例
输入
Thin34543king 121 is8 interesting121.
I like121 thinking23.
输出
121 3
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
string hws[100];
int num[100] = {0};
int nu = 0;
void ssort(string s[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if ((s[j] > s[j + 1] && s[j].length() == s[j + 1].length()) || (s[j].length() > s[j + 1].length()))
swap(s[j], s[j + 1]);
}
}
}
bool judge(string n) //判断回文数
{
string s = n;
int length = s.length();
bool flag = true;
for (int i = 0; i < length / 2; i++)
{
if (s[i] != s[length - 1 - i])
{
flag = false;
break;
}
}
return flag;
}
void search(string hws[], int num[], string n, int &nu) //查找或者插入
{
int i;
for (i = 0; i < nu; i++)
{
if (hws[i] == n)
{
num[i] = num[i] + 1;
break;
}
}
if (i == nu)
{
hws[nu] = n;
num[nu] = 1;
nu = nu + 1;
//cout << nu << endl;
}
return;
}
void display(string hws[], int num[], int nu) //输出
{
if (nu > 0)
{
int n[100];
string maxi[100];
int numbers = 1;
int max = num[0];
maxi[0] = hws[0];
// cout << nu << endl << endl;
// for (int i = 0; i < nu; i++)
// {
// cout << num[i] << " " << hws[i] << endl;
// }
// cout << endl;
for (int i = 1; i < nu; i++)
{
if (num[i] > max)
{
numbers = 1;
max = num[i];
maxi[numbers - 1] = hws[i];
}
else if (num[i] == max)
{
numbers++;
maxi[numbers - 1] = hws[i];
}
}
ssort(maxi, numbers);
for (int i = 0; i < numbers; i++)
{
cout << maxi[i];
cout << " " << max << endl;
}
}
else
{
cout << "None" << endl;
}
return;
}
int main(void)
{
//freopen("in.txt", "r", stdin);
string n = "";
char ch = getchar();
while (ch != EOF)
{
n = "";
bool flag = false;
while (ch <= '9' && ch >= '0')
{
if (!(flag == false && ch == '0'))
{
flag = true;
n = n + ch;
}
ch = getchar();
}
if (flag == true)
{
bool f = judge(n);
if (f == true && n.length() > 1)
{
search(hws, num, n, nu);
}
}
ch = getchar();
}
display(hws, num, nu);
//fclose(stdin);
return 0;
}