完全没准备北理机试结果翻车了[暴风哭泣.jpg],虽然最后还是拿到了计算机专硕offer,但是贼不甘心,把机试第一题重新打一遍,一百分钟没做粗来的再做只花了二十分钟不到。。。[难受.jpg]
总的来说题目都挺简单的,出思路也蛮快,就是我完全没花时间练。。。
------------------------------------------------------------------------------------------------------------------------
题目:求一串字符串(全大写)中重复次数大于等于3的字符
输入:XXXYY
输出:X3
--------------------------------------------------------------------------------------------------------------------------
上代码:
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
string a;
char se[26]; //用来存放重复3次及以上次数的字符,按照字母表顺序排放,便于有序输出
int len,rep[26],flag[50],i,j,n;
for(i=0;i<26;i++){
rep[i]=0; //重复次数
}
while(true){
cin>>a;
len = a.length();
for(i=0;i<26;i++){
rep[i]=0; //rep存放重复次数
}
for(i=0;i<len;i++){
flag[i]=0; //作为比较的“许可证”,防止重复比较字符导致计数重复
}
for(i=0;i<len;i++){
for(j=0;j<len;j++){
if((flag[i]==0)&&(a[i]==a[j])){
n= a[i]-'A'-1;
// printf("n: %d\n",n); //用来调试的
rep[n]++;
// printf("REP: %d\n",rep[n]); //用来调试的
se[n] = a[i];
flag[j]=1;
flag[i]=1;
}
}
}
for(i=0;i<26;i++){
if(rep[i]>2){
printf("%c%d",se[i],rep[i]);
}
}
printf("\n");
}
return 0;
}
【2020.3更新】
最近刷题比较频繁,有点感觉了,然后又回头拿这道题做练手,这次用的方法比较简单,本来还想试试无序map,但是发现编辑器版本和库的问题一直在报错所以弃疗。上代码,方法简单粗暴:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
string s;
int seq;
int charmap[26];
cin>>s;
for(int i=0;i<26;i++){
charmap[i]=0;
}
for(int i=0;i<s.length();i++){
seq = s[i]-'A';
// printf("seq: %d\n",seq);
charmap[seq]++;
}
for(int j=0;j<26;j++){
if(charmap[j]>3||charmap[j]==3){
printf("%c%d",(char)(j+'A'),charmap[j]);
}
}
return 0;
}
差点忘记补充一点,这次代码里用的输入用的是cin,在写的时候我开始用的是scanf,但是发现莫名其妙一直都出不来结果,虽然也不知道为什么,总之这一次遇到的坑让我觉得cin和cout还真香!