习题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;
}
}