iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0

UVA10321

點我進入UVA10321題目

#include <iostream>
#include <algorithm>

using namespace std;
int n,m;
bool cmp(int x,int y){
	int xO=abs(x%2),yO=abs(y%2);
	if(x%m!=y%m)return x%m<y%m;
	else if(xO!=yO)return xO>yO;
	else if(xO)return x>y;
	else return x<y;

}

int main(){
	int a[10001];
	
	while(cin>>n>>m&&n!=0){
		cout<<n<<" "<<m<<endl;
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		sort(a,a+n,cmp);
		
		for(int i=0;i<n;i++){
			cout<<a[i]<<endl;
		}
		cout<<0<<" "<<0<<endl;
		
	
	}


}

UVA12019

點我進入UVA10321題目

我的解題思路

題目要求:

只要計算出1月0日~輸入的日期間隔幾天,把它mod七天,根據題目1月10日是星期一,可推得1/7是星期五,所以若餘數是0就代表該天是星期五
1.建立每個月有幾天
2.建立星期表(餘數0是星期五,餘數1是星期六...)
3.輸入case數
4.輸入日期
5.將日去加上前幾個月的天數,才能得知1月0日~輸入的日期是間隔了幾天
6.將天數mod 7天去對照星期表
7.輸出

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;//數字會很大,用字串來處理
    
    while(cin>>s)
    {
        if(s=="0")
        {
            break;
        }
        
        int odd=0,even=0;//odd計算奇數位數的加總
                         //even計算偶數位數的加總
        for(int i=0;i<s.length();i++)//為了要計算每個位數,但系統不知道有幾位數,可用s.length()取出位數
         //一定要從i=0開始算
        {
            if(i%2==1)//先找出奇數位數
            {
                odd+=(s[i]-'0');//再將奇數位的值加總
                                /*字串某一個字來計算會用ASCII碼, 因為數字的ASCII碼相連,
                                     所以減掉'0'的ASCII碼就是字串的數字了*/
            }
            else//再找出偶數位
            {
                even+=(s[i]-'0');
            }
        }
        
        if((odd-even)%11==0)//奇偶位數相減能整除11就是11的倍數
        {
            cout<<s<<" is a multiple of 11."<<endl;
        }
        else
        {
            cout<<s<<" is not a multiple of 11."<<endl;
        }
    }
    return 0;
}

上一篇
[Day 06] UVA10929 &UVA10783
下一篇
[Day 08] UVA10170& UVA10812& UVA299
系列文
30天從0開始的NCPC之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言