HDU-5980-水题-二进制转换

来源:互联网 发布:java获取11位时间轴 编辑:程序博客网 时间:2024/06/05 21:13

https://vjudge.net/contest/166094#problem/J
开始想的是每次和97抑或,后来发现不对。其实就是一丁点的模拟而已。。思想想到了但是感觉这样太麻烦,其实不麻烦,,只是码力不够。

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int c[10]={1,0,0,0,0,1,1,0};int main(){    int m,a;   int b[40];   int l;    scanf("%d",&m);    int sum=0;    while(m--)    {   scanf("%d",&a);        l=0;        memset(b,0,sizeof(b));        while(a)        {  b[l++]=a%2;           a/=2;        }l--;    //for(int i=0;i<=l;i++)        //cout<<b[i];        for(int i=0;i<=31;i+=8)        {    bool flag=true;            for(int j=0;j<=7;j++)             {  if(c[j]!=b[i+j])                 {flag=false;break;}             }            if(flag) sum++;        }    }    cout<<sum<<endl;    return 0;}

队友的代码::

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>#include <cmath>using namespace std;typedef long long ll;const int maxn=100000;int m[maxn];int w0=1,w1=256,w2=256*256,w3=256*256*256;int main(){  int n;int sum;  while(~scanf("%d",&n))  {      sum=0;      for(int i=0;i<n;i++)      {          scanf("%d",&m[i]);      }      for(int i=0;i<n;i++)      {            int temp=0;            temp=m[i]/w3;            if(temp==97)sum++;            m[i]%=w3;            temp=m[i]/w2;            if(temp==97)sum++;            m[i]%=w2;            temp=m[i]/w1;            if(temp==97)sum++;            m[i]%=w1;            temp=m[i]/w0;            if(temp==97)sum++;            m[i]%=w0;      }      printf("%d\n",sum);  }    return 0;}

又写了一次。。

#include <bits/stdc++.h>using namespace std;int num[40];int sum[6];int a;int main(){    int m;     while(~scanf("%d",&m)){           int ans=0;           memset(sum,0,sizeof(sum));           for(int i=1;i<=m;i++){                scanf("%d",&a);                memset(num,0,sizeof(num));                memset(sum,0,sizeof(sum));                int t=0;                int w=1;                while(a){                    num[t++]=a%2;                    a/=2;                }               // for(int i=0;i<31;i++)                   // printf("%d",num[i]);                //cout<<endl;                for(int i=0;i<=7;i++){                    sum[1]+=num[i]*w;                    w*=2;                }                w=1;                for(int i=8;i<=15;i++){                    sum[2]+=num[i]*w;                    w*=2;                }                w=1;                for(int i=16;i<=23;i++){                    sum[3]+=num[i]*w;                    w*=2;                }                w=1;                for(int i=24;i<=31;i++){                    sum[4]+=num[i]*w;                    w*=2;                }               for(int i=1;i<=4;i++){                   //cout<<sum[i]<<endl;                   if(sum[i]==97)                    ans++;               }           }      printf("%d\n",ans);     }    return 0;}
原创粉丝点击