Jolly Jumper: 相鄰的2個數相差的距離絕對值為1 ~ (n-1)
例如:
4 1 4 2 3
===>4個數字差異為 3,2,1,符合1 ~ (n-1)
5 1 4 2 -1 6
===>5個數字差異為 3,2,3,7,未符合1 ~ (n-1)
#include <iostream>
#include <set>
using namespace std;
int main(){
int num;
set <int> s;
set <int> ::iterator it;
while(cin>>num){
int a,b;
cin>>a;
for(int i=0;i<num-1;i++){
cin>>b;
if(abs(a-b)<num&&abs(a-b)) s.insert(abs(a-b));
a=b;
}
if(s.size()==num-1)cout<<"Jolly"<<endl;
else cout<<"Not jolly"<<endl;
s.clear();
}
}
重點是國名,所以想辦法取得每行的第一個詞就好了,後面的就棄置不用
1.宣告三個變數
2.輸入行數,國名,人名
3.排順序
4.印出國名
5.找重複的國
6.印出重複的次數
#include <iostream>
#include<algorithm> //因為sort
using namespace std;
int main()
{
int n;
cin >> n;//要在這邊就要輸入n才能宣告後面的country[n]
string country[n];//要打[n]才可以用後續的程式來找順序
string name;
for( int i = 0 ; i < n ; i++){ //輸入n次國名與人名
cin >> country[i];
getline(cin, name); //輸入人名(但用不到),因為人名中間有空格所以用getline是
}
sort( country, country+n); //依題目要求排序國名
int i = 0, j = 0;
while( i < n){
cout << country[i] << " "; //印出國名
int count = 0; //初始此國的出現次數
for( j = i ; j < n ; j++ ){ //開始往後找
if( country[i] != country[j]){ //若國名不同則跳出
break;
}
count++; //若國名相同則計數一次
}
cout << count << endl; //印出國名出現次數
i = j; //因為j跟i為不同國家,所以之後從j這個新國家開始找
}
return 0;
}