日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

32行代码AC——L1-027 出租 (20分)(~解题报告~)

發布時間:2024/2/28 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 32行代码AC——L1-027 出租 (20分)(~解题报告~) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

立志用更少的代碼做更高效的表達


下面是新浪微博上曾經很火的一張圖:

一時間網上一片求救聲,急問這個怎么破。其實這段代碼很簡單,index數組就是arr數組的下標,index[0]=2 對應 arr[2]=1,index[1]=0 對應 arr[0]=8,index[2]=3 對應 arr[3]=0,以此類推…… 很容易得到電話號碼是18013820100。

本題要求你編寫一個程序,為任何一個電話號碼生成這段代碼 —— 事實上,只要生成最前面兩行就可以了,后面內容是不變的。

輸入格式:
輸入在一行中給出一個由11位數字組成的手機號碼。

輸出格式:
為輸入的號碼生成代碼的前兩行,其中arr中的數字必須按遞減順序給出。

輸入樣例:
18013820100

輸出樣例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};


解法分析

最初想到用set容器做排序和去重, 但考慮到set容器不好操作(因為要用迭代器), 于是想到了桶排序去重的思路, 大概過程如下:

1、遍歷手機號, 定義數組a,將與手機號數字相同的數組值全部置1, 最后從大到小遍歷數組a, 若值為1,則將其下角標存入b,得到的b就是降序且去重的數組。

2、得到b數組后就簡單很多了,二重循環暴力判斷即可(手機號只有11位,無需化簡)。


代碼展示

#include<bits/stdc++.h> #define len 11 using namespace std;int a[10]; //若出現,則置1 int main() {string s; cin>>s;int sum = 0; //統計號碼中不同數字的個數 for(int i = 0; i < len; i++) a[(int)(s[i]-'0')] = 1; //這段代碼為b數組賦值 vector<int>b;int j = 0; for(int i = 9; i >= 0; i--) if(a[i] == 1) b.push_back(i); //為b數組賦值 int c[len]; //存放數字對應的位數 for(int i = 0; i < len; i++) {int k = ((int)(s[i]-'0'));for(int j = 0; j < b.size(); j++) {if(b[j] == k) c[i] = j; }}//輸出b數組 cout << "int[] arr = new int[]{";for(int i = 0; i < b.size(); i++) {if(i != 0) cout << ',';cout << b[i];}cout << "};" << '\n';//輸出c數組 cout << "int[] index = new int[]{";for(int i = 0; i < len; i++) {if(i != 0) cout << ',';cout << c[i];}cout << "};";return 0; }

每日一句

忍耐不是美德,把忍耐當成美德是這個偽善的世界維持它扭曲的秩序的方式,生氣才是美德?!斗克肩鞯某鯌贅穲@》

總結

以上是生活随笔為你收集整理的32行代码AC——L1-027 出租 (20分)(~解题报告~)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。