恒生笔试题记

1、关于进程控制块(PCB)的一些知识:
PCB是操作系统能“感知”进程存在的唯一标志;PCB与进程是一一对应的;操作系统是通过管理PCB来管理进程的。
2、编程题:
编写程序将由数字及字符组成的字符串中的数字截取出来并按顺序输出,例如:“ ABC137GMNQQ2049PN5FFF”,输出结果应为“01234579”。
解答思路:采用桶排序的思想,申请数组来标志出现的数字,最大的字符为‘z’ = ‘a’+26-1=122;而’0’=48,‘A’=65,’a’=97。因此申请的数组空间为122-48 = 74。
实现代码为:

#include 
#include 
using namespace std;
int main()
{
    string s="ABC1371242747GMNQQ200049PN5FFFz8";
    int book[75];    //申请标志数组
    int len = s.length();


    for(int i = 0; i<75 ; i++)
        book[i] = 0;   //初始化标志数组

    for(int j = 0;j < len;j++)
    {
        book[s[j]-'0']++;//统计出现的字符,在对于的位置标记
    }

    for(i=0;i<=9;i++)
    {
        for(j=1;j<=book[i];j++)
            cout<< i <<" ";
    }
    cout<return 0;
}

3、算法题
质数又称素数。指大于1的自然数中除了1和本身外,不能被其他自然数整除。把一个合数分解成若干个质因数乘积的形式,叫做分解质因数。例如12可以分解为2*2*3。编程实现能把任意合数分解成质因数的乘积。
思路没什么好说的,直接上代码吧!

#include 
#include 
using namespace std;
bool Isprime(int n)  //判断是否为素数
{
    int j = sqrt(n);
    for(int i=2;iif(n%i==0)
            return false;
    }
    return true;
}

int main()
{
 int n,i;
 cout << "input the num: n=";
 cin>>n;

 if(Isprime(n))    //若为素数,则直接输出1*n
 {
    cout << "1*"<return 0;
 }

 for(i=2;i<=n;i++)   //若不为素数,则进行分解
 {
    if(n%i==0)
    {
        cout << i <<"*";
        n = n/i;  
        i=1;
    }

 }   
 cout <<"\b";  //退格,消除最后那个数的*号
 return 0;
}

你可能感兴趣的:(笔试)