iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0

UVA10038

點我看UVA10038

解題思路

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();
			
		
	}


}

UVA10420

點我看UVA10420

解題思路

重點是國名,所以想辦法取得每行的第一個詞就好了,後面的就棄置不用
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;
}

上一篇
[Day 12] UVA11417 & UVA11461
下一篇
[Day14] UVA10922 & UVA11332 & UVA10050
系列文
30天從0開始的NCPC之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言