• 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 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 }
  • 相关阅读:
    liunx下手动安装git及配置
    Liunx系统下删除自带的JDK及安装需要的JDK版本
    Pipeline简单实现的代码
    HttpClient-post请求,含图片
    Java
    函数及BOM
    JS--EcmaScript
    定位
    浮动
    盒子模型
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/8868138.html
Copyright © 2020-2023  润新知