复习基础算法的感想

  晚上做杭电OJ,第二题是一个比较直观的题,我也是太直观了。贴出代码,供自己反省,从7点15分一直做到结束,wa9次。。。。orz。。。。看来自己的算法功底还差的很远很远。

  

  接下的几天,学习大白上的基础

算法部分。

  

#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
char a[20],b[20];
char c[20];
void shuchu(int num)
{
    if(num==0)
    return ;
    shuchu(num/2);
    printf("%d",num%2);
}
void translate(int num)
{
    if(num<16)
    printf("0");
    if(num<8)
    printf("0");
    if(num<4)
    printf("0");
    if(num<2)
    printf("0");
   /* while(num)
    {
        printf("%d",num%2);
        num=num/2;
    }*/
    shuchu(num);
}
void fun1()
{
    if(!strcmp(a,"ADD"))
        printf("000001");
    if(!strcmp(a,"SUB"))
        printf("000010");
    if(!strcmp(a,"DIV"))
        printf("000011");
    if(!strcmp(a,"MUL"))
        printf("000100");
    if(!strcmp(a,"MOVE"))
        printf("000101");
    if(!strcmp(a,"SET"))
        printf("000110");

}
void fun2()
{
    int num1=0;
    int i=0;
    while(b[i]!=,&&b[i]!=\0)
    {
        i++;
    }
    //cout<<i<<endl;
    if(i==3)
    {
        num1+=b[i-1]-0;
        num1+=(b[i-2]-0)*10;
        translate(num1);
    }
    else if(i==2)
    {
        num1+=b[i-1]-0;
        translate(num1);
    }

    if(!strcmp(a,"SET"))
    return;
    int num2=0;
    int j=0;
    i+=2;
    while(b[i]!=\0)
    {
        j++;
        i++;
    }
    if(j==1)
    {
        num2+=b[i-1]-0;
        translate(num2);
    }
    else if(j==2)
    {
        num2+=b[i-1]-0;
        num2+=(b[i-2]-0)*10;
        translate(num2);
    }
}
void fun3()
{
    char d[20];
    for(int i=0;i<6;i++)
    {
        d[i]=c[i];
    }
    d[6]=\0;
    if(strlen(c)==16||strlen(c)==11)
    {
    }
    else
    {
        printf("Error!");
        return;
    }
    if(strlen(c)==11)
    {
        if(strcmp(d,"000110"))
       {
        printf("Error!");
        return;
       }
    }
    if(strlen(c)==16)
    {
        if(!strcmp(d,"000110"))
       {
        printf("Error!");
        return;
       }
    }
    if(!strcmp(d,"000001"))
        printf("ADD R");
    else if(!strcmp(d,"000010"))
        printf("SUB R");
    else if(!strcmp(d,"000011"))
        printf("DIV R");
    else if(!strcmp(d,"000100"))
        printf("MUL R");
    else if(!strcmp(d,"000101"))
        printf("MOVE R");
    else if(!strcmp(d,"000110"))
        printf("SET R");
    else
    {
        printf("Error!");
        return;
    }

    int num1=0;
    int k=16;
    for(int i=6;i<11;i++)
    {
        num1+=(c[i]-0)*k;
        k/=2;
    }
    printf("%d",num1);
    if(!strcmp(d,"000110"))
    return;
    printf(",R");
    int num2=0; k=16;
    for(int i=11;i<16;i++)
    {
        num2+=(c[i]-0)*k;
        k/=2;
    }
    printf("%d",num2);

}
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==1)
        {
            cin>>a>>b;
            fun1();
            fun2();
            cout<<endl;
        }
        if(n==0)
        {
            cin>>c;
            fun3();
            cout<<endl;
        }
    }
    return 0;
}
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。