美文网首页
简单计算题集锦

简单计算题集锦

作者: nino天 | 来源:发表于2014-08-19 15:45 被阅读37次

鸡兔同笼问题

注意,脚不是4的倍数的时候最少的动物数,其实就是(N-2)/4+1,只不过这里整形截断了小数部分..

#include "stdio.h"
int main()
{

    int nCases,nFeet ,i;
    scanf("%d",&nCases);
    for(i=0; i<nCases;i++){
       scanf("%d", &nFeet);
       if(nFeet%2 !=0)
           printf("0 0\n");
       else if(nFeet%4 != 0)
           printf("%d %d\n",nFeet/4+1,nFeet/2);
       else
           printf("%d %d\n",nFeet/4,nFeet/2);
    }
    return 0;
}

棋盘距离问题

注意不要忽略后的x==0 和y==0的情况

#include "stdio.h"
#include "math.h"
int main()
{
   int nCase;
   scanf("%d",&nCase);
   char begin[20][2],end[20][2];
   for(int i=0;i<nCase;i++)
   {
       scanf("%s%s",&begin[i],&end[i]);
   }
   for(i=0; i<nCase;i++)
   {
       int x,y;
       x = abs(begin[i][0]-end[i][0]);//字母
       y = abs(begin[i][1]-end[i][1]);//数字

       if(x==0 && y==0) printf("0 0 0 0\n");
       else
       {
           if(x<y) printf("%d",y);//王
           else printf("%d",x);

           if(x==y || x==0 || y==0) printf(" 1");//后
           else printf(" 2");

           if(x==0 || y==0) printf(" 1");//车
           else printf(" 2");

           if(abs(x-y)%2 !=0) printf(" Inf\n");//象
           else if(x==y) printf(" 1\n");
           else printf(" 2\n");

       }
   }
    return 0;
}

校门外的树

主要的问题是怎么存储如果开一个数组,实在是太大,而且不能根据L来调整数组大小,浪费空间。用vector<bool>来存flag值比较节省空间。注意一个反省算法的用法count..

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
     int L,M,start,end,m,i;
     cin>>L>>M;
     vector<bool> tree(L+1,true);

     for (m=0;m<M;m++) {
        cin>>start>>end;
         for(i=start;i<=end;i++)
             tree[i]=false;  
     }
     cout<<count(tree.begin(),tree.end(),true)<<endl;
     return 0;
}

确定进制问题

1.需要注意字符串转十进制数的方法ret = ret*b + x[i]-'0';
2.注意如果在2-16数制中如数字超过进制,返回-1,提前跳出当前循环...

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

long b2ten(string x,int b)
{
   long ret = 0;
   for(int i=0;i<x.length();i++)
   {
       if(x[i]-'0'>=b) return -1;
       ret = ret*b + x[i]-'0';
   }
   return ret;
}

int main()
{
     int n,b;
     string p,q,r;
     long pAgr,qAgr,rAgr;
     cin>>n;
     while(n--)
     {
         cin>>p>>q>>r;
         for(b=2;b<=16;b++)
         {
             pAgr = b2ten(p,b);
             qAgr = b2ten(q,b);
             rAgr = b2ten(r,b);
             if(pAgr == -1 || qAgr == -1 || rAgr == -1) continue;
             if(pAgr * qAgr == rAgr){
                cout<<b<<endl;
                break;
             }
         }
     }
     if(b == 17) cout<<"0"<<endl;

     return 0;
}

skew数的问题

挺简单,就是一个数制转换的问题,要把每一个base的基计算出来,要注意base和字符串的对应关系..

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int base[31],sum,k;
    string skew;
    base[0] = 1;
    for(int i=1; i<31; i++) base[i]=2*base[i-1]+1;
    while(1)
    {
        cin>>skew;
        if(skew == "0")
            break;
        sum = 0;
        k = skew.length();
        for(i=0;i<skew.length();i++)
        {
            k--;
            sum += (skew[i]-'0')*base[k];
        }
        cout<<sum<<endl;
    }
    return 0;
}

相关文章

网友评论

      本文标题:简单计算题集锦

      本文链接:https://www.haomeiwen.com/subject/kpgetttx.html