【算法入门经典】 第三章

来源:互联网 发布:ubuntu创建文件夹16.04 编辑:程序博客网 时间:2024/06/06 09:22


习题3-1 分数统计(stat)

1.

#include <iostream>#include <fstream>#include <set>using namespace std;int main(){int a[101];bool b[101];memset(a,0,sizeof(a));memset(b,false,sizeof(b));ifstream cin("in.txt");int f;while(true){cin>>f;if(f==-1)break;a[f]++;}int max = 1;for(int i=1;i<101;i++){if(a[i]>a[max])max=i;}for(int i=1;i<101;i++){if(a[i] == a[max])cout<<i<<endl;}}

2.

#include <iostream>#include <fstream>#include <set>#include<map>using namespace std;int main(){map<double,int> m;ifstream cin("in.txt");while(true){double f;cin>>f;if(f==-1)break;map<double,int>::iterator it;it = m.find(f);if(it==m.end()){m.insert(make_pair(f,1));}else{it->second++;}}map<double,int>::iterator it;double maxNum = m.begin()->second;double max = m.begin()->first;for(it=m.begin();it!=m.end();it++){if(it->second>maxNum){maxNum = it->second;max = it->first;}}for(it=m.begin();it!=m.end();it++){if(it->second==maxNum)cout<<it->first<<endl;}}

此类问题用map解决更加容易。 此处注意set中find()的用法,找到键值返回对应的索引位置,找不到返回set.end()的指针索引



习题3-2 单词的长度 (word)

#include <iostream>#include <fstream>#include <set>#include<map>using namespace std;int main(){int all=0;char w[100];int count=0;while(cin>>w){if(!strcmp(w,"-1"))break;all+=strlen(w);count++;}cout<<all/count<<endl;}


习题3-3 乘积的末三位

#include<iostream>#include<map>#include<vector>using namespace std;void del(char* a,int i){for(int j=i;a[j]!='\0';j++)a[j]=a[j+1];}int main(){vector<char*> v;while(true){char* tmp = new char[100];cin>>tmp;if(strcmp(tmp,"-1")==0)break;for(int i=0;tmp[i]!='\0';i++){if(tmp[i]<='Z'&&tmp[i]>='A'){del(tmp,i);i--;}}v.push_back(tmp);}int r = 1;for(int i=0;i<v.size();i++){int m = r*atoi(v[i]);r = m%1000;}cout<<abs(r)<<endl;}


习题3-4 计算器

#include <iostream>#include <fstream>#include <set>#include<map>using namespace std;int main(){int a,b,result;char c;while(cin>>a>>c>>b){switch(c){case '+':cout<<a+b<<endl;break;case '-':cout<<a-b<<endl;break;case '*':cout<<a*b<<endl;break;}}}

此题输入很巧妙,自动识别了


习题3-5 旋转

#include <iostream>#include <fstream>#include <set>#include<map>using namespace std;int main(){int n;cin>>n;cout<<"Enter the array: ";char* input = new char[n];for(int i=0;i<n*n;i++)cin>>input[i];char** a = new char*[n];for(int i=0;i<n;i++)a[i] = new char[n];int index = 0;for(int i=0;i<n;i++){for(int j=0;j<n;j++)a[i][j] = input[index++];}char** b = new char*[n];for(int i=0;i<n;i++)b[i] = new char[n];char* c= new char[n*n];int count = 0;for(int j = n-1;j>=0;j--){for(int i = 0;i<n;i++){int tmp = c[count++] = a[i][j];}}count = 0;for(int i=0;i<n;i++){for(int j=0;j<n;j++)b[i][j] = c[count++];}for(int i=0;i<n;i++){for(int j=0;j<n;j++)cout<<b[i][j]<<' ';cout<<endl;}}

习题3-6 进制转换1

#include<iostream>#include<vector>using namespace std;int main(){vector<int> result;int b,n;cin>>b>>n;int div = b;int count = 0;while(n!=0){result.push_back(n%b);n = n/b;div = b*div;}for(int i=result.size()-1;i>=0;i--)cout<<result[i]<<' ';return 0;}

习题3-7 进制转换2

#include<iostream>#include<vector>using namespace std;int main(){int n;int b;cin>>b>>n;int r=0;int div = 1;while(n!=0){r+=n%10*div;div*=b;n/=10;}cout<<r<<endl;}

习题3-8 手机键盘

#include<iostream>#include<map>using namespace std;int main(){map<char,int> m;for(int i=0;i<18;i++)m.insert(make_pair(char(97+i),i%3+1));m.insert(make_pair('s',4));m.insert(make_pair('t',1));m.insert(make_pair('u',2));m.insert(make_pair('v',3));m.insert(make_pair('w',1));m.insert(make_pair('x',2));m.insert(make_pair('y',3));m.insert(make_pair('z',4));char input[100];cin>>input;map<char,int>::iterator it;for(int i=0;input[i]!='\0';i++){it = m.find(input[i]);cout<<input[i]<<it->second;}}





0 0