常见机试基础类题目
1.计算字符串最后一个单词的长度,单词以空格隔开。
#include<iostream>
#include<string>
using namespace std;
int main(){
string line;
while(getline(cin,line))
{
int len=line.length()-1;
int num=0;
while(len>=0)
{
if(line[len]==' ')
{ len--;continue; }
else
break;
}
while(line[len]!=' ')
{
len--;num++;
if(len<0)
break;
}
cout<<num<<endl;
}
return 0;
}
2.写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int main()
{
string str;
char f;
char f_max;
char f_min;
getline(cin,str);
cin>>f;
if (isupper(f))
{
f_max=f;
f_min=f+'a'-'A';
}
else
{ f_min=f;
f_max=f+'A'-'a';
}
int str_len=str.length();
int count=0;
for(int i=0;i<str_len;i++)
{
if(str[i]==f_min ||str[i]==f_max )
count++;
}
cout<<count<<endl;
return 0;
}
3.连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int xuhuan=2;
string line;
while(getline(cin,line))
{
int len_str=line.length();
int m=len_str/8;
int n=len_str%8;
for (int i=0;i<m*8;i++)
{ cout<<line[i];
if ((i+1)%8==0)
{
cout<<endl;
}
}
if(n)
{
for (int i=m*8;i<m*8+8;i++)
{ if (i<len_str)
cout<<line[i];
else
cout<<0;
}
cout<<endl;
}
}
}
4.写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
#include<iostream>
#include<string>
using namespace std;
int main()
{
int len_str=0;
int s;
while(cin>>hex>>s)
{
cout<<s<<endl;
}
return 0;
}
5.功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
using namespace std;
int main()
{
long n;
while(cin>>n)
{
while(n != 1)
{
for(int i=2; i<=n; i++)
{
if(n % i == 0)
{
n = n / i;
cout<<i<<' ';
break;
}
}
}
}
return 0;
}
6.写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
#include<iostream>
#include<string>
#include<math>
using namespace std;
int main()
{
double num=0;
cin>>num;
double results=0;
if (num==0)
{
results=0;
}
else
{
results=(num>0)?(num+0.5):(num-0.5);
}
results=floor(results);
cout<<results;
return 0;
}
7.输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int main()
{
string str;
int flag[10]={0};
while(cin>>str)
{
for(int i=0;i<10;i++)
flag[i]=0;
int str_size=str.size();
for (int i=str_size-1;i>=0;i--)
{
if(!flag[str[i]-'0'])
{
cout<<str[i];
flag[str[i]-'0']=1;
}
}
cout<<endl;
}
return 0;
}
8.编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
#include<iostream>
#include<string>
#include<numeric>
using namespace std;
int main()
{
string str;
while(cin>>str)
{
int str_long=str.length();
vector<int> str_flag(128,0);
int flag=0;
for(int i =0;i<str_long;i++)
{
if (str[i]>=0&&str[i]<=127)
str_flag[str[i]]=1;
}
cout<<accumulate(str_flag.begin(),str_flag.end(),0);
}
return 0;
}
9.正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
#include<iostream>
#include<string>
using namespace std;
int gcb(int n1,int n2)
{
int t=0;
if(n2==0)
return n1;
if(n1%n2==0)
{
return n2;
}
else
{
t=n1%n2;
n1=n2;
n2=t;
return gcb(n1,n2);
}
}
int main()
{
int n1,n2;
while(cin>>n1>>n2)
{
int t=gcb(n1,n2);
long long out=n1/t*n2;
cout<<out<<endl;
}
return 0;
}