PTA甲级刷题记录——数学问题题解,方便自己复盘
A1008 Elevator (20分)(简单数学)
题目大意:
有一部电梯,最开始停在第0层,上一层需要6s,下一层需要4s,每次到达当前的目的楼层需要停留5s。现给出电梯要去的楼层的顺序,求总共花费的时间(最后不需要回到第0层)
#include <iostream> using namespace std ;int main (int argc, const char * argv[]) { int n; cin >>n; int now = 0 ; int ans = 0 ; int to; for (int i = 0 ; i< n ; i ++) { cin >>to; if (to>now) { ans += (to-now)*6 ; } else { ans += (now-to) *4 ; } ans+=5 ; now = to; } cout <<ans<<endl ; return 0 ; }
1015 Reversible Primes (20分)(素数)
题目大意:给出正整数N和进制radix,如果N是素数且N在radix进制下反转后的数在十进制下也是素数,则输出“YES”,否则输出“NO”。
思路:(1)判断是否为素数,从2开始到n的平方根,看有没有数能整除n,如果没有,n就是素数
#include <iostream> #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <string> #include <queue> #include <vector> #include <cmath> using namespace std ;bool isPrime (int n) { if (n <= 1 ) return false ; for (int i = 2 ; i<= int (sqrt (n*1.0 )) ; i++) { if ( n%i ==0 ) { return false ; } } return true ; } int main (int argc, const char * argv[]) { int n,radix; int d[110 ]; while (scanf ("%d" ,&n) != EOF) { if (n < 0 ) break ; scanf ("%d" ,&radix); if (isPrime(n) == false ) { printf ("No\n" ); } else { int len = 0 ; do { d[len++] = n%radix; n = n/radix; } while (n!=0 ); for (int i = 0 ; i< len ; i++) { n = n*radix +d[i]; } if (isPrime(n) ) printf ("Yes\n" ); else printf ("No\n" ); } } return 0 ; }