• 面试题题解


    A、大还是小?

    思路:不能当做浮点数输入,要当做字符串输入,然后比较小数点的位置,再比较小数点前的大小,再比较小数部分的大小。

      1 #include<stdio.h>
      2 #include<iostream>
      3 #include<string.h>
      4 #include<math.h>
      5 #include<algorithm>
      6 #include<vector>
      7 #include<string>
      8 #include<queue>
      9 #include<map>
     10 #include<stack>
     11 #include<set>
     12 #define ll long long
     13 #define maxn 100010
     14 #define PI acos(-1.0)    //圆周率
     15 const ll INF = 1e18;
     16 using namespace std;
     17 char s1[110],s2[110];
     18 int cas;
     19 int main()
     20 {
     21     cas=0;
     22     while(scanf("%s %s",s1,s2)!=EOF)
     23     {
     24         int len1=strlen(s1);
     25         int len2=strlen(s2);
     26 
     27         int dex1=0;
     28         int dex2=0;
     29 
     30         for(int i=0;i<len1;i++)
     31         {
     32             if(s1[i]=='.')
     33             {
     34                 dex1=i;
     35                 break;
     36             }
     37         }
     38         for(int i=0;i<len2;i++)
     39         {
     40             if(s2[i]=='.')
     41             {
     42                 dex2=i;
     43                 break;
     44             }
     45         }
     46 
     47         if(dex1!=dex2)
     48         {
     49             if(dex1<dex2)  printf("Case %d: Smaller
    ",++cas);
     50             if(dex1>dex2)  printf("Case %d: Bigger
    ",++cas);
     51             continue;
     52         }
     53 
     54         int len=len1<len2?len1:len2;
     55         int flag=-1;
     56         for(int i=0;i<len;i++)
     57         {
     58             if(s1[i]>s2[i])
     59             {
     60                 flag=1;
     61                 break;
     62             }
     63             else if(s1[i]<s2[i])
     64             {
     65                 flag=2;
     66                 break;
     67             }
     68         }
     69 
     70         if(flag==1)  printf("Case %d: Bigger
    ",++cas);
     71         else if(flag==2)  printf("Case %d: Smaller
    ",++cas);
     72         else
     73         {
     74             if(len1>len2)
     75             {
     76                 for(int i=len;i<len1;i++)
     77                 {
     78                     if(s1[i]!='0')
     79                     {
     80                         flag=1;
     81                         break;
     82                     }
     83                 }
     84             }
     85             else if(len1<len2)
     86             {
     87                 for(int i=len;i<len2;i++)
     88                 {
     89                     if(s2[i]!='0')
     90                     {
     91                         flag=2;
     92                         break;
     93                     }
     94                 }
     95             }
     96             else
     97             {
     98                 for(int i=len;i<len2;i++)
     99                 {
    100                     if(s2[i]!='0')  flag=2;
    101                     else if(s1[i]!='0')  flag=1;
    102 
    103                     if(flag!=-1)  break;
    104                 }
    105             }
    106 
    107             if(flag==1)  printf("Case %d: Bigger
    ",++cas);
    108             else if(flag==2)  printf("Case %d: Smaller
    ",++cas);
    109             else  printf("Case %d: Same
    ",++cas);
    110         }
    111     }
    112 
    113     return 0;
    114 }
    View Code

    B、错误的算法

    思路:先用错误的算法算出答案,再用正确的算法算出答案,再比较,不同的就是强数据,相同的就是弱数据,正确的算法是算出每一种可能再选出最大的那个。

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<string>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<set>
    12 #define ll long long
    13 #define maxn 100010
    14 #define PI acos(-1.0)    //圆周率
    15 const int INF = 500000;
    16 using namespace std;
    17 int maze[510][510];
    18 int c[510];
    19 int r[510];
    20 int n,m;
    21 int cas;
    22 int main()
    23 {
    24     cas=1;
    25     while(scanf("%d %d",&n,&m)!=EOF)
    26     {
    27         memset(maze,0,sizeof(maze));
    28         for(int i=0;i<n;i++)
    29         {
    30             for(int j=0;j<m;j++)  scanf("%d",&maze[i][j]);
    31         }
    32 
    33         int k=0;
    34         int bigr=0;
    35         int bigc=0;
    36         for(int i=0;i<n;i++)
    37         {
    38             k=0;
    39             for(int j=0;j<m;j++)  k+=maze[i][j];
    40             r[i]=k;
    41             bigr=bigr>k?bigr:k;
    42         }
    43         for(int i=0;i<m;i++)
    44         {
    45             k=0;
    46             for(int j=0;j<n;j++)  k+=maze[j][i];
    47             c[i]=k;
    48             bigc=bigc>k?bigc:k;
    49         }
    50 
    51         int ans=0;
    52         for(int i=0;i<n;i++)
    53         {
    54             for(int j=0;j<m;j++)
    55             {
    56                 k=r[i]+c[j]-maze[i][j];
    57                 ans=ans>k?ans:k;
    58             }
    59         }
    60 
    61         int f=0;
    62         for(int i=0;i<n;i++)
    63         {
    64             for(int j=0;j<m;j++)
    65             {
    66                 if(r[i]==bigr&&c[j]==bigc)
    67                 {
    68                     k=r[i]+c[j]-maze[i][j];
    69                     if(k!=ans)  f=1;
    70                     else  f=2;
    71                     break;
    72                 }
    73             }
    74             if(f)  break;
    75         }
    76 
    77         if(f==1)  printf("Case %d: Strong
    ",cas++);
    78         else  printf("Case %d: Weak
    ",cas++);
    79     }
    80 
    81     return 0;
    82 }
    View Code

    C、又一道简单题

    思路:直接把四个数的可能性都枚举一次就行了

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<string>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<set>
    12 #define ll long long
    13 #define maxn 10010
    14 #define PI acos(-1.0)    //圆周率
    15 const ll INF = 1e18;
    16 using namespace std;
    17 int vis[maxn];
    18 int T,n;
    19 int main()
    20 {
    21     while(scanf("%d",&T)!=EOF)
    22     {
    23         int cas=1;
    24         for(int i=1;i<=100;i++)  vis[i*i]=1;
    25         while(T--)
    26         {
    27             scanf("%d",&n);
    28             int a=n/1000;
    29             int b=n/100%10;
    30             int c=n/10%10;
    31             int d=n%10;
    32 
    33             int ans=0;
    34 
    35             for(int i=1;i<=9;i++)
    36             {
    37                 if(i!=a)
    38                 {
    39                     int k=i*1000+b*100+c*10+d;
    40                     if(vis[k])  ans++;
    41                 }
    42             }
    43 
    44             for(int i=0;i<=9;i++)
    45             {
    46                 if(i!=b)
    47                 {
    48                     int k=a*1000+i*100+c*10+d;
    49                     if(vis[k])  ans++;
    50                 }
    51             }
    52 
    53             for(int i=0;i<=9;i++)
    54             {
    55                 if(i!=c)
    56                 {
    57                     int k=a*1000+b*100+i*10+d;
    58                     if(vis[k])  ans++;
    59                 }
    60             }
    61 
    62             for(int i=0;i<=9;i++)
    63             {
    64                 if(i!=d)
    65                 {
    66                     int k=a*1000+b*100+c*10+i;
    67                     if(vis[k])  ans++;
    68                 }
    69             }
    70 
    71             printf("Case %d: %d
    ",cas++,ans);
    72         }
    73     }
    74 
    75     return 0;
    76 }
    View Code

    D、就多了两分钟

    思路:把时长用分钟表示出来,如果不是30的倍数,少的那部分就是还要上机的时间,然后凑到30的倍数之后除以30就是费用了

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<string>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<set>
    12 #define ll long long
    13 #define maxn 100010
    14 #define PI acos(-1.0)    //圆周率
    15 const ll INF = 1e18;
    16 using namespace std;
    17 int h1,h2,m1,m2;
    18 int cas;
    19 int main()
    20 {
    21     cas=1;
    22     while(scanf("%d %d %d %d",&h1,&m1,&h2,&m2)!=EOF)
    23     {
    24         if(h1>h2||(h1==h2&&m1>m2))
    25         {
    26             printf("Day %d: Joking
    ",cas++);
    27             continue;
    28         }
    29 
    30         if(m1>m2)
    31         {
    32             m2+=60;
    33             h2-=1;
    34         }
    35 
    36         int ti=(h2-h1)*60+m2-m1;
    37 
    38         int mon=0;
    39         int ans=0;
    40         if(ti%30==0)
    41         {
    42             mon=ti/30;
    43             ans=0;
    44         }
    45         else
    46         {
    47             mon=ti/30+1;
    48             ans=mon*30-ti;
    49         }
    50 
    51         printf("Day %d: %d %d
    ",cas++,mon,ans);
    52     }
    53 
    54     return 0;
    55 }
    View Code

    E、N!

    思路:大数乘阶模板

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<string>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<set>
    12 #define ll long long
    13 #define maxn 100010
    14 #define PI acos(-1.0)    //圆周率
    15 const ll INF = 1e18;
    16 using namespace std;
    17 int f[maxn];
    18 int main()
    19 {
    20     int i,j,n;
    21     while(scanf("%d",&n)!=EOF)
    22     {
    23         memset(f,0,sizeof(f));
    24 
    25         f[0]=1;
    26         int count=1;
    27         for(i=1; i<=n; i++)
    28         {
    29             int c=0;//进位
    30             for(j=0; j<count; j++)//阶乘位数
    31             {
    32                 int s=f[j]*i+c;
    33                 f[j]=s%10;
    34                 c=s/10;
    35             }
    36 
    37             while(c)
    38             {
    39                 f[count++]=c%10;
    40                 c/=10;
    41             }
    42         }
    43 
    44         for(j=maxn-1; j>=0; j--)
    45             if(f[j]) break;
    46 
    47         for(i=j; i>=0; i--)
    48             printf("%d",f[i]);
    49 
    50         printf("
    ");
    51     }
    52     return 0;
    53 }
    View Code

    F、最小公倍数

    思路:求最小公倍数的模板

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<string>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<set>
    12 #define ll long long
    13 #define maxn 100010
    14 #define PI acos(-1.0)    //圆周率
    15 const ll INF = 1e18;
    16 using namespace std;
    17 int gcd(int x,int y)
    18 {
    19     if(x%y) return gcd(y,x%y);
    20     return y;
    21 }
    22 int main()
    23 {
    24     int m,n;
    25     while(scanf("%d%d",&m,&n)!=EOF)
    26     {
    27         int ans=m/gcd(m,n)*n;
    28         printf("%d
    ",ans);
    29     }
    30     return 0;
    31 }
    View Code

    G、小明A+B

    思路:无论输入的数据的大小,直接对100取余,然后相加得到的答案再对100取余

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<math.h>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<string>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<set>
    12 #define ll long long
    13 #define maxn 100010
    14 #define PI acos(-1.0)    //圆周率
    15 const ll INF = 1e18;
    16 using namespace std;
    17 int T;
    18 int a,b;
    19 int main()
    20 {
    21     scanf("%d",&T);
    22     while(T--)
    23     {
    24         scanf("%d %d",&a,&b);
    25         a%=100;
    26         b%=100;
    27 
    28         int ans=a+b;
    29         ans%=100;
    30 
    31         printf("%d
    ",ans);
    32     }
    33 
    34     return 0;
    35 }
    View Code

     

  • 相关阅读:
    Bugly和dispatch_once Crash
    IQKeyboardManager
    Storyboard References
    Book
    Git管理
    iOS开发之RunLoop--转
    H264之PPS、SPS了解
    iOS之UI设置随记
    使用 github 本地项目上传到github上 步骤
    spring中自定义注解
  • 原文地址:https://www.cnblogs.com/2cm-miao/p/6606449.html
Copyright © 2020-2023  润新知