@Pinetrie
2019-01-25T12:06:53.000000Z
字数 1879
阅读 1079
题意:对一组整数进行排序,排序后找出给定数字在数组中的位置。
题解:对数据进行排序然后再查找。查找可以用二分也可以不用二分。
#include <stdio.h>#include <algorithm>#include <vector>using namespace std;int main(){int i,n,m,x,cas = 0;while(scanf("%d %d",&n,&m) && n && m){vector<int>num;printf("CASE# %d:\n",++cas);for(i = 1; i <= n; i++){int a;scanf("%d",&a);num.push_back(a);}sort(num.begin(),num.end());while(m--){scanf("%d",&x);int p = lower_bound(num.begin(),num.end(),x) - num.begin();if(num[p] == x){printf("%d found at %d\n",x,p + 1);}elseprintf("%d not found\n",x);}}return 0;}
题意:将一个文本中的所有单词找出来排序后输出,不能重复。
题解:用set的去重加排序功能很轻松,难的地方的如何把单词从文本中提取出来。可以用2个string类,s1和s2,s2开始为空,对输入的s1中的字符一个一个判断,如果是小写字母则直接加入s2中,如果是大写字母则转化成小写字母后再加入s2中,其他类型的字符则不管。
#include <cstdio>#include <cstring>#include <set>#include <iostream>using namespace std;set<string>words;int main(){string s1,s2;while(cin>>s1){s2 = "";for(int i = 0; i <= s1.size(); i++){if(s1[i] >= 'A' && s1[i] <= 'Z')s2 += s1[i] + 32;else if(s1[i] >= 'a' && s1[i] <= 'z')s2 += s1[i];else if(s2.size() > 0){words.insert(s2);s2 = "";}}}set<string>::iterator it;for(it = words.begin();it != words.end();it++){cout<<*it<<"\n";}return 0;}
题意:给出一系列单词,找出其中的特殊单词(将该单词的字母重排后无法在给出的单词 中找到相同的单词,不区分大小写),然后按字典序输出。
题解:用一个string到string的映射表示标准化后的字符串(字符串中不存在小写字母且 字母按字典序排列),一个字符到数字的映射表示该标准化后的字符串出现的次数 ,最好把标准化后出现一次的字符串加入vector中排序后输出。
#include <bits/stdc++.h>using namespace std;vector<string>words; //存原单词vector<string>ans_words; //存要输出的单词map<string,int>time_words; //字符串到出现次数的映射map<string,string>change; //字符串到标准化字符串的映射int main(){string s1,s2;while(cin>>s1){if(s1 == "#") break;s2 = "";words.push_back(s1);for(int i = 0;i < s1.size();i++) //将s1中的字母转换成小写{if(s1[i] >= 'A' && s1[i] <= 'Z')s2 += s1[i] + 32;elses2 += s1[i];}sort(s2.begin(),s2.end()); //将s2中的字符按字典序排列change[s1] = s2;time_words[s2]++;}for(int i = 0;i < words.size();i++) //找出可以输出的字符串{if(time_words[change[words[i]]] == 1)ans_words.push_back(words[i]);}sort(ans_words.begin(),ans_words.end());for(int i = 0;i < ans_words.size();i++)cout<<ans_words[i]<<endl;return 0;}