华为上机题

1.解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位。解析后以10进制的数字输出。
如果解析到非法字符串则返回-1 

9进制:
 9进制的数的范围:0,1,2,3,4,5,6,7,8
 9进制的开始为:0V或者0v
 9进制的正确实例:0V11 0v564 0V123 0v0784 0V0 0v 0V
 9进制的错误实例:0V923 0vt12 00V21 0123 
 9进制转换为10进制:0V11 -> 10
        0v564 -> 463
 
11进制:
 11进制的数的范围:0,1,2,3,4,5,6,7,8,9,A(a)
 11进制的开始为:0W或者0w
 11进制的正确实例:0W11 0w564 0W123 0w0A8a 0W 0w
 11进制的错误实例:0WB923 0wVaA 00W21 0WAx123 
 11进制转换为10进制:
        0W11 -> 12
        0w564 -> 675

#include <math.h>

#include<iostream>
#include <string>
using namespace std;
void main()
{
    
    string str;
    cin>>str;
    int len=str.length();
    
    char *ch=new char[len];
    for (int i=0;i<len;i++)
    {
        ch[i]=str[i];
    }
    int iRet=0;
    if (ch[0]=='0'&&(ch[1]=='v'||ch[1]=='V'))
    {
        for (int i=len-1;i>1;i--)
        {
            if (ch[i]>'8'||ch[i]<'0')
            {
                cout<<-1;
                return;
            }
            iRet+=(ch[i]-'0')*((int)pow(9.0,len-1-i));
        }
    }
    else if (ch[0]=='0'&&(ch[1]=='w'||ch[1]=='W'))
    {
        for (int i=len-1;i>1;i--)
        {
            if (ch[i]!='a'&&ch[i]!='A'&&(ch[i]>'9'||ch[i]<'0'))
            {
                cout<<-1;
                return;
            }
            if (ch[i]=='a'||ch[i]=='A')
            {
                ch[i]='0'+10;
            }
            iRet+=(ch[i]-'0')*((int)pow(11.0,len-1-i));
        }
    }
    else
         {
             cout<<-1;
              return;
         }
    cout<<iRet;
    
}

 2.一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。

#include <iostream>
#include <vector>
using namespace std;
void main()
{
    int putnum=0;
    int outnum=0;
    cin>>putnum;
    vector<int>p(putnum+1,0);
    for (int i=1;i<putnum+1;i++)
    {
        for (int index=i;index<putnum+1;index+=i)//idex步长和idex初始化
        {
            p[index]=!p[index];
        }
    }
    for (int i=1;i<putnum+1;i++)
    {
        if (p[i]==1)
        {
            outnum++;
        }
    }
    cout<<outnum;
}
原文地址:https://www.cnblogs.com/mu-tou-man/p/3894426.html