• 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 I题 二数


    题目链接https://www.nowcoder.com/acm/contest/91/I

    思路:从左往右扫,发现第一个奇数,要特判第一个为9的情况。然后比第一个奇数大的让其后面的奇数全为0;比第一个奇数小的让其后面全为8。

    判断原来的数后面是否大于444.....444。如果大于那么就选第一个数,否则选第二个数。

      1 /*
      2     代码写丑了
      3 */
      4 #include<iostream>
      5 #include<string>
      6 #include<string.h>
      7 #include<algorithm>
      8 #include<stdio.h>
      9 using namespace std;
     10 bool cmp(string a,int num){
     11     for(int i=num;i<a.length();i++){
     12         if(a[i]=='4'){
     13             continue;
     14         }else if(a[i]>'4'){
     15             return false;
     16         }else{
     17             return true;
     18         }
     19     }
     20     return true;
     21 }
     22 int main(){
     23     int n;
     24     cin>>n;
     25     while(n--){
     26         string a;
     27         cin>> a;
     28         char ans1[100500];
     29         memset(ans1,0,sizeof(ans1));
     30         char ans2[100500];
     31         memset(ans2,0,sizeof(ans2));
     32         int flag=0;
     33         for(int j=0;j<a.length();j++){
     34             if(flag==0&&a[j]=='9'){
     35                 flag=1;
     36                 for(int i=j;i<a.length();i++){
     37                     if(a[i]=='9'){
     38                         ans1[i]='8';
     39                     }else if((a[i]-'0')%2){
     40                         ans1[i]='8';
     41                     }else{
     42                         ans1[i]='8';
     43                     }
     44                 }
     45                 int t=0;
     46                 for(int i=0;i<strlen(ans1);i++){
     47                     if(t==0&&i<strlen(ans1)-1&&ans1[i]=='0'){
     48                         continue;
     49                     }else{
     50                         t=1;
     51                         cout<<ans1[i];
     52                     }
     53                 }
     54                 cout<<endl;
     55                 break;
     56             }else if(flag==0&&(a[j]-'0')%2){
     57                 flag=1;
     58                 ans1[j]=char(a[j]-1);
     59                 ans2[j]=char(a[j]+1);
     60                 for(int i=j+1;i<a.length();i++){
     61                     if(a[i]=='9'){
     62                         ans1[i]='8';
     63                         ans2[i]='0';
     64                     }else if((a[i]-'0')%2){
     65                         ans1[i]='8';
     66                         ans2[i]='0';
     67                     }else{
     68                         ans1[i]='8';
     69                         ans2[i]='0';
     70                     }
     71                 }
     72                 bool fg=cmp(a,j+1);
     73                 int t=0;
     74                 if(fg){
     75                     for(int i=0;i<strlen(ans1);i++){
     76                         if(t==0&&i<strlen(ans1)-1&&ans1[i]=='0'){
     77                             continue;
     78                         }else{
     79                             t=1;
     80                             cout<<ans1[i];
     81                         }
     82                     }
     83                     cout<<endl;
     84                 }else{
     85                     for(int i=0;i<strlen(ans2);i++){
     86                         if(t==0&&i<strlen(ans2)-1&&ans2[i]=='0'){
     87                             continue;
     88                         }else{
     89                             t=1;
     90                             cout<<ans2[i];
     91                         }
     92                     }
     93                     cout<<endl;
     94                 }
     95                 break;
     96             }else{
     97                 ans1[j]=a[j];
     98                 ans2[j]=a[j];
     99             }
    100         }
    101         if(flag==0){
    102             for(int i=0;i<a.length();i++){
    103                 cout<<a[i];
    104             }
    105             cout<<endl;
    106         }
    107     }
    108     return 0;
    109 }
  • 相关阅读:
    my.cnf
    js日期和毫秒互转
    传送门
    js 十进制转十六进制
    关键字
    常见异常
    Map迭代
    Hibernate

    MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flushhosts' 解决方法
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/8868138.html
Copyright © 2020-2023  润新知