OJ 刷題 5-3 出租 (20)
阿新 • • 發佈:2019-02-17
一時間網上一片求救聲,急問這個怎麼破。其實這段程式碼很簡單,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};
實現程式碼如下:
#include <iostream> #include <string> #include <cstdio> #include <cstdlib> #include <cstdbool> #include <algorithm> #define up(i,a,b) for(int i=a;i<=b;i++)//巨集定義一個迴圈 #define down(i,a,b) for(int i=b;i>=a;i--) bool cmp(int a,int b)//在使用sort是增加的一個引數, { return a>b;//降序排列 若為(a<b),升序排列 } int a[11]; int n[11]={0}; using namespace std; int main() { std::ios_base::sync_with_stdio(false);//解除cin與stdin同步佔用的時間 string s; cin>>s; up(i,0,s.size()-1){ a[i]=s[i]-'0'; } sort(a,a+11,cmp); int len=unique(a,a+11)-a;//去重函式,去除相鄰元素重複的數值(只保留一個),事實上unique的去除並不是真正意義上的刪除,而是將重複的元素移動到陣列的後面 up(i,0,10){//在a陣列中尋找s中的元素,找到之後將a中元素的表賦值給新的陣列。新的陣列作為題目的index[]儲存數值 up(j,0,len-1){ if(s[i]-'0'==a[j]) n[i]=j; } } cout<<"int[] arr = new int[]{"; //輸出表達式 up(i,0,len-1){ if(i!=len-1) cout<<a[i]<<","; else cout<<a[i]<<"};"<<endl; } cout<<"int[] index = new int[]{"; up(j,0,10){ if(j!=10) cout<<n[j]<<","; else cout<<n[j]<<"};"<<endl; } return 0; }
開始看這個題的時候不得不佩服做IT行業的人的腦洞,為了一個安靜思考的環境也是一個很簡單的測試,卻可以看出一個是否學習過敲程式碼。有趣