iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
自我挑戰組

30天從0開始的NCPC之旅系列 第 8

[Day 08] UVA10170& UVA10812& UVA299

  • 分享至 

  • xImage
  •  

UVA10170

點我進入UVA10170題目

解題思路

即S+(S+1)+(S+2)+...(S+N)>=D,求出N即可

#include <iostream>

using namespace std;

int main(){
	long long int a,b;
	while(cin>>a>>b){
		long long int count=a,sum=0;
		while(true){
			sum+=count;
			if(sum>=b)break;
			count++;
		}
		cout<<count<<endl;
	}

}

UVA10812

點我進入UVA10812題目

解題思路

  1. 可藉由(分數和+分數差)除2得到其中一隊的分數
  2. 可藉由(分數和-分數差)除2得到其中一隊的分數,且此隊的分數一定比較低
  3. 需檢查分數和與分數差是否與輸入值相同,且分數一定大於零(只需檢查B隊,因為B隊的分數一定比較低)
#include <iostream>
using namespace std;

int main()
{
    int t,s,d,a,b;
    cin>>t;
    while(t--){
        cin>>s>>d;
        a=(s+d)/2;
        b=(s-d)/2;
        if((a+b)==s&&(a-b)==d&&b>0){
            cout<<a<<" "<<b<<endl;
        }
        else {
            cout<<"impossible"<<endl;
        }
        
    }
return 0;
    
}

UVA299

點我進入UVA299題目

#include<iostream>
using namespace std;

int main(){ //泡沫排序法 
 int i=0,n,l,swap,tmp,p;
 cin>>n;
 
 
 while(n>0){
  cin>>l;
  int length[l],swap=0,k=0;
  
  while(k<l){ //放進陣列 
  cin>>p;
  length[k]=p;
  k++;
 }
 for(int i=0;i<l-1;i++){ //因為有j+1的問題,index error所以,所需檢查的陣列會減一 
  for(int j=0;j<l-1-i;j++){ //美交換一次,所需檢查的陣列會減一 
   if(length[j]>length[j+1]){
    tmp=length[j]; //大的放暫時變數 
    length[j]=length[j+1];  //小的放進前一個
    length[j+1]=tmp; //大的放進後一個,交換 
    swap++; 
   }
  }
 }
 cout<<"Optimal train swapping takes " <<swap <<" swaps."<<endl;
 n--;
 }
}

上一篇
[Day 07] UVA10321 &UVA12019
下一篇
[Day 09] UVA10222&UVA10093
系列文
30天從0開始的NCPC之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
deku
iT邦新手 5 級 ‧ 2022-09-21 00:10:26

恩,不錯不錯寫得可以,解題思路很清晰,簡明易了

我要留言

立即登入留言