#10139: 第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.206.6] | 發表日期 : 2015-08-15 15:45

#include<iostream>

int main()
{
int n , m ;
int color[52] = {0} ;
int number[52] = {0} ;
std::cin >> n ;
for(int i = 0 ; i < n ; i++)
{
char c ;
std::cin >> c >> number[i] ;
if( c == 'S' )
color[i] = 4 ;
else if( c == 'H' )
color[i] = 3 ;
else if( c == 'D' )
color[i] = 2 ;
else if( c == 'C' )
color[i] = 1 ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j < n ; j++)
if( number[i] < number[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
{
if( number[i] != number[j] )
break ;
else
if( color[i] < color[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
}
std::cin >> m ;
if( color[ m - 1 ] == 4 )
std::cout << "S " ;
else if( color[ m - 1 ] == 3 )
std::cout << "H " ;
else if( color[ m - 1 ] == 2 )
std::cout << "D " ;
else if( color[ m - 1 ] == 1 )
std::cout << "C " ;
std::cout << number[ m - 1 ] << "\n" ;
return 0 ;
}

 
 
#10140: Re:第三筆測資過不了 help me~~


kkmomo (kkmomo)

學校 : 不指定學校
編號 : 29247
來源 : [114.24.230.4]
最後登入時間 :
2022-06-22 22:10:17
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [111.243.62.43] | 發表日期 : 2015-08-15 19:33

for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
 
j 的範圍要小於 n
 
#10141: Re:第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.206.6] | 發表日期 : 2015-08-15 22:16

for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
 
j 的範圍要小於 n
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
 
 
j 是數字大小相同的時候比的所以 範圍才小於 i+3
 
#10143: Re:第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.206.6] | 發表日期 : 2015-08-15 22:39

#include

int main()
{
int n , m ;
int color[52] = {0} ;
int number[52] = {0} ;
std::cin >> n ;
for(int i = 0 ; i < n ; i++)
{
char c ;
std::cin >> c >> number[i] ;
if( c == 'S' )
color[i] = 4 ;
else if( c == 'H' )
color[i] = 3 ;
else if( c == 'D' )
color[i] = 2 ;
else if( c == 'C' )
color[i] = 1 ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j < n ; j++)
if( number[i] < number[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
{
if( number[i] != number[j] )
break ;
else
if( color[i] < color[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
}
std::cin >> m ;
if( color[ m - 1 ] == 4 )
std::cout << "S " ;
else if( color[ m - 1 ] == 3 )
std::cout << "H " ;
else if( color[ m - 1 ] == 2 )
std::cout << "D " ;
else if( color[ m - 1 ] == 1 )
std::cout << "C " ;
std::cout << number[ m - 1 ] << "\n" ;
return 0 ;
}

  

第三筆測資

有52張牌

求第50大的牌

 

 

color = {1~4} 代表花色CDHS

 

由於不明原因程式跑完後 第50大的牌的花色( color[ 50 - 1 ] ) 變成 13

我自己又找不到bug 請個位大大幫忙

 
#10144: Re:第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.206.6] | 發表日期 : 2015-08-15 22:39

#include

int main()
{
int n , m ;
int color[52] = {0} ;
int number[52] = {0} ;
std::cin >> n ;
for(int i = 0 ; i < n ; i++)
{
char c ;
std::cin >> c >> number[i] ;
if( c == 'S' )
color[i] = 4 ;
else if( c == 'H' )
color[i] = 3 ;
else if( c == 'D' )
color[i] = 2 ;
else if( c == 'C' )
color[i] = 1 ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j < n ; j++)
if( number[i] < number[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
{
if( number[i] != number[j] )
break ;
else
if( color[i] < color[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
}
std::cin >> m ;
if( color[ m - 1 ] == 4 )
std::cout << "S " ;
else if( color[ m - 1 ] == 3 )
std::cout << "H " ;
else if( color[ m - 1 ] == 2 )
std::cout << "D " ;
else if( color[ m - 1 ] == 1 )
std::cout << "C " ;
std::cout << number[ m - 1 ] << "\n" ;
return 0 ;
}

  

第三筆測資

有52張牌

求第50大的牌

 

 

color = {1~4} 代表花色CDHS

 

由於不明原因程式跑完後 第50大的牌的花色( color[ 50 - 1 ] ) 變成 13

我自己又找不到bug 請個位大大幫忙

 
#10145: Re:第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.206.6] | 發表日期 : 2015-08-15 22:39

#include

int main()
{
int n , m ;
int color[52] = {0} ;
int number[52] = {0} ;
std::cin >> n ;
for(int i = 0 ; i < n ; i++)
{
char c ;
std::cin >> c >> number[i] ;
if( c == 'S' )
color[i] = 4 ;
else if( c == 'H' )
color[i] = 3 ;
else if( c == 'D' )
color[i] = 2 ;
else if( c == 'C' )
color[i] = 1 ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j < n ; j++)
if( number[i] < number[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
{
if( number[i] != number[j] )
break ;
else
if( color[i] < color[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
}
std::cin >> m ;
if( color[ m - 1 ] == 4 )
std::cout << "S " ;
else if( color[ m - 1 ] == 3 )
std::cout << "H " ;
else if( color[ m - 1 ] == 2 )
std::cout << "D " ;
else if( color[ m - 1 ] == 1 )
std::cout << "C " ;
std::cout << number[ m - 1 ] << "\n" ;
return 0 ;
}

  

第三筆測資

有52張牌

求第50大的牌

 

 

color = {1~4} 代表花色CDHS

 

由於不明原因程式跑完後 第50大的牌的花色( color[ 50 - 1 ] ) 變成 13

我自己又找不到bug 請個位大大幫忙

 
#10146: Re:第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.206.6] | 發表日期 : 2015-08-15 22:39

#include

int main()
{
int n , m ;
int color[52] = {0} ;
int number[52] = {0} ;
std::cin >> n ;
for(int i = 0 ; i < n ; i++)
{
char c ;
std::cin >> c >> number[i] ;
if( c == 'S' )
color[i] = 4 ;
else if( c == 'H' )
color[i] = 3 ;
else if( c == 'D' )
color[i] = 2 ;
else if( c == 'C' )
color[i] = 1 ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j < n ; j++)
if( number[i] < number[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
for(int i = 0 ; i < n ; i++)
for(int j = i + 1 ; j <= i + 3 ; j++)
{
if( number[i] != number[j] )
break ;
else
if( color[i] < color[j] )
{
int tmp = number[i] ;
number[i] = number[j] ;
number[j] = tmp ;
int ctmp = color[i] ;
color[i] = color[j] ;
color[j] = ctmp ;
}
}
std::cin >> m ;
if( color[ m - 1 ] == 4 )
std::cout << "S " ;
else if( color[ m - 1 ] == 3 )
std::cout << "H " ;
else if( color[ m - 1 ] == 2 )
std::cout << "D " ;
else if( color[ m - 1 ] == 1 )
std::cout << "C " ;
std::cout << number[ m - 1 ] << "\n" ;
return 0 ;
}

  

第三筆測資

有52張牌

求第50大的牌

 

 

color = {1~4} 代表花色CDHS

 

由於不明原因程式跑完後 第50大的牌的花色( color[ 50 - 1 ] ) 變成 13

我自己又找不到bug 請個位大大幫忙

 
#10149: Re:第三筆測資過不了 help me~~


kkmomo (kkmomo)

學校 : 不指定學校
編號 : 29247
來源 : [114.24.230.4]
最後登入時間 :
2022-06-22 22:10:17
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [111.243.62.43] | 發表日期 : 2015-08-16 02:59

j < n 是必要條件 ,不清楚的話實際帶數字進去就會知道問題了 
#10150: Re:第三筆測資過不了 help me~~


kkmomo (kkmomo)

學校 : 不指定學校
編號 : 29247
來源 : [114.24.230.4]
最後登入時間 :
2022-06-22 22:10:17
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [111.243.62.43] | 發表日期 : 2015-08-16 03:07

j < n 是必要條件 ,不清楚的話實際帶數字進去就會知道問題了

 

不限制 j 的範圍會overflow

 

 
#10152: Re:第三筆測資過不了 help me~~


nike00811 (nike)

學校 : 國立中興大學
編號 : 47947
來源 : [115.82.13.83]
最後登入時間 :
2020-02-15 23:45:56
d545. 2. 抽紙牌(poker) -- 98學年度台北市資訊學科能力競賽 | From: [114.37.215.217] | 發表日期 : 2015-08-16 08:55

j < n 是必要條件 ,不清楚的話實際帶數字進去就會知道問題了

 

不限制 j 的範圍會overflow

 

已AC感恩


 
ZeroJudge Forum