出租(标记+格式输出)
題目描述
某電線桿上出現了如下的出租信息:
紫荊公寓單間短期出租四個月,550元/月(水電煤公攤,網費35元/月)。空調,衛生間,廚房齊全。屋內均為 IT 行業人士,喜歡安靜,所以要求前來出租者最好為同行或者剛畢業的年輕人,愛干凈、安靜.
有意者電聯
聯系人:成先生
聯系方式:請閱讀代碼
int[] arr = new int[]{8,2,1,0,3};
int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};
String tel = “”;
for(int i : index){
tel+= arr[i];
}
System.out.println(“Tel:”+tel);
有人想租房,卻不知道電話號碼到底是多少。其實這段代碼很簡單,index 數組就是 arr 數組的下標,index[0]=2 對應 arr[2]=1,index[1]=0 對應 arr[0]=8,index[2]=3 對應 arr[3]=0,以此類推,很容易得到電話號碼為 18013820100。
HYR 覺得這十分有創意,但是他不會編程,于是他找到了你,希望你生成該程序的前兩行(因為后面都是一樣的)的程序。
輸入
一行電話號碼(長度不多于 20)
輸出
兩行分別輸出代碼的前兩行,為了統一格式,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};
分析
- 這是我大一學院天梯選拔賽翻車的一道水題。由于當時時間緊迫,又執著于找出輸入號碼中的幾個不同的數字存入數組再排序,就這樣gg了。
- 題目思路很簡單明了:找到輸入號碼中的不同數字以遞減順序存入arr數組中。然后,找到輸入的各個數字在arr數組中的下標,并把下標值存在index數組中。最后,按題目格式輸出即可。
- 由于輸入的號碼最多可到20且為了方便處理,所以我們選擇用字符串存儲號碼。
- 我們可先創建一個bool類型的hava標記數組,然后遍歷字符串,如果數字i出現,則把hava[i]標記為true。
- 接著,因為是要求降序存儲,所以從9到0遍歷arr數組。如果Hava[i]為true,則把i存儲在arr數組中。(由于hava標記數組的存在,省去了排序的時間,也減少了不同數字的難度)
- 找到輸入的各個數字在arr數組中的下標,并把下標值存在index數組中。最后按題目所給的格式輸出就好。這里值得注意的是,**格式最好直接復制樣例輸出的!!!**不然因為自己打錯字母,打漏空格而WA一次,就太不值得了。
代碼如下
#include <iostream> #include <string> using namespace std; int arr[10],index[20]; bool hava[10];//標記數組 int main() {string s;int ans=0;cin>>s;for(int i=0;i<s.length();i++)//遍歷字符串{int dex=s[i]-'0';hava[dex]=true;//如果有這個數字,則做標記}for(int i=9;i>=0;i--)//因為要遞減順序,所以是從9到0遍歷{if(hava[i])arr[ans++]=i;}for(int i=0;i<s.length();i++){int dex=s[i]-'0';for(int j=0;j<ans;j++)if(arr[j]==dex){index[i]=j;break;//如果找到了,就結束本層循環}}for(int i=0;i<ans;i++){if(i==0)cout<<"int[] arr = new int[]{";else cout<<",";cout<<arr[i];}cout<<"};"<<endl;for(int i=0;i<s.length();i++){if(i==0)cout<<"int[] index = new int[]{";else cout<<",";cout<<index[i];}cout<<"};"<<endl;return 0; }總結
以上是生活随笔為你收集整理的出租(标记+格式输出)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P1031 均分纸牌(经典贪心)
- 下一篇: 抢劫(01背包+对立事件)