关于数论:数论专题BJBN基础上机试题

36次阅读

共计 3585 个字符,预计需要花费 9 分钟才能阅读完成。

BJ: 分数矩阵

咱们定义如下矩阵:
1/1 1/2 1/3
1/2 1/1 1/2
1/3 1/2 1/1
矩阵对角线上的元素始终是 1 /1,对角线两边分数的分母一一递增。
申请出这个矩阵的总和。
输出
输出蕴含多组测试数据。每行给定整数 N(N<50000),示意矩阵为 N *N。当 N = 0 时,输出完结。
输入
输入答案,后果保留 2 位小数。
样例输出 Copy
1
2
3
4
0
样例输入 Copy
1.00
3.00
5.67
8.83

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//using namespace std;
//
//int main(){
//    int n = 0;
//    while(scanf("%d",&n) != EOF){//        if( n == 0){
//            break;
//        }
//        double sum = n;
//        for(int i = 2; i <= n; i++){//            sum += 2 * (1.00 / i) * (n - i + 1);
//        }
//        printf("%.2f\n",sum);
//    }
//    return 0;
//}

BK: 计算并集

给你两个汇合,要求 {A} + {B}。
注: 同一个汇合中不会有两个雷同的元素。
输出
每组输出数据分为三行,第一行有两个数字 n,m(0<n,m<=10000),别离示意汇合 A 和汇合 B 的元素个数。后两行别离示意汇合 A 和汇合 B。每个元素为不超出 int 范畴的整数,每个元素之间有一个空格隔开。
输入
针对每组数据输入一行数据,示意合并后的汇合,要求从小到大输入,每个元素之间有一个空格隔开。
样例输出 Copy
1 2
1
2 3
1 2
1
1 2
样例输入 Copy
1 2 3
1 2

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//using namespace std;
//
//int main(){
//    int m = 0,n = 0,num = 0,i,j;
//    int a[10000],b[10000],b1[10000],c[20000];
//    while(scanf("%d %d",&m,&n) != EOF){//        for(i = 0; i < m; i++){//            scanf("%d",&a[i]);
//        }
//        for(i = 0; i < n; i++){//            scanf("%d",&b[i]);
//            b1[i] = 1;
//        }  
//        for(i = 0; i < m; i++){//            for(j = 0; j < n; j++){//                if(a[i] == b[j]){//                    b1[j] = 0;// 给反复的 flag 一下
//                }
//            }
//        }
//        num = 0;
//        for(i = 0; i < m; i++){//            c[num++] = a[i];//
//        }
//        for(i = 0; i < n; i++){//            if(b1[i]){// 判断一下是否被标记为 0,若为 0 即不要将他放到 c[]数组中 
//                c[num++] = b[i];// 
//            }
//        }
//        sort(c,c + num);//#include<algorithm> 头文件蕴含函数
//        for(i = 0; i < num; i++){//            if(i < num - 1){// 此处最初一个字符之外的须要输入空格,//                printf("%d",c[i]);    
//            }else{//                printf("%d\n",c[i]);// 最初一个字符不须要输入空格
//            }    
//        }
//    
//    }
//    return 0;
//}

#### BL: 判断三角形形态
给你三角形的三条边,你能通知我它是哪种三角形吗?
如果是直角三角形,请输入“good”。如果是等腰三角形,请输入“perfect”。否则,请输入“just a triangle”。
题目保障输出数据非法。
输出
输出的第一行为一个整数 t,示意测试样例的数量。
每组样例蕴含了三个整数 a,b,c,代表了三角形的三条边的长度。(0<a,b,c<300)
输入
对于每组样例,输入后果,每组后果占一行。
样例输出 Copy
4
3 4 5
2 2 3
1 4 4
4 6 3
样例输入 Copy
good
perfect
perfect
just a triangle

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//using namespace std;
//
//int main(){
//    int n = 0;
//    scanf("%d",&n);
//    int a,b,c;
//    while(n--){//        scanf("%d %d %d",&a,&b,&c);
//        if(a == b || b == c ||a == c || (a == b == c)){//            printf("perfect\n");
//        }else if(a * a + b * b == c * c || c * c + b * b == a * a || c * c + a * a == b * b){//            printf("good\n");
//        }else{//            printf("just a triangle\n");
//        }
//    }
//    return 0;
//}

BM: 寻找第二小的数

求 n 个整数中第二小的数。
雷同的整数看成一个数。比方,有 5 个数别离是 1,1,3,4,5,那么第二小的数就是 3。
输出
输出蕴含多组测试数据。输出的第一行是一个整数 C,示意有 C 组测试数据;
每组测试数据的第一行是一个整数 n,示意本组测试数据有 n 个整数(2<=n<=10),接着一行是 n 个整数(每个数均小于 100)。
输入
为每组测试数据输入第二小的整数,如果不存在第二小的整数则输入“NO”,每组输入占一行。
样例输出 Copy
3
2
1 2
5
1 1 3 4 5
3
1 1 1
样例输入 Copy
2
3
NO

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//using namespace std;
//
//int main(){
//    int t = 0;
//    int a[10000];
//    scanf("%d",&t);
//    while(t--){
//        int n = 0,i;
//        scanf("%d",&n);
//        for(int i = 0; i < n; i++){//            scanf("%d",&a[i]);
//        }
//        sort(a,a + n);
//        for(i = 0; i < n - 1; i++){//            if(a[i] != a[i + 1]){//                printf("%d\n",a[i + 1]);
//                break;    
//            }
//        }
//        if(i == n - 1){//            printf("NO\n");
//        }
//    }
//    return 0;
//}

BN: 验证角谷猜测

数论中有许多猜测尚未解决,其中有一个被称为“角谷猜测”的问题,该问题在五、六十年代的美国多个驰名高校中曾风行一时,这个问题是这样形容的:任何一个大于一的自然数,如果是奇数,则乘以三再加一;如果是偶数,则除以二;得出的后果持续依照后面的规定进行运算,最初必然失去一。当初请你编写一个程序验证他的正确性。
输出
题目蕴含多组测试数据,第一行为测试数据组数 N,接着是 N 行的正整数。
输入
输入验证“角谷猜测”过程中的奇数,最初失去的 1 不必输入;每个测试题输入一行;每行中只有两个输入之间能力有一个空格;如果没有这样的输入,则输入:No number can be output !。
样例输出 Copy
4
5
9
16
11
样例输入 Copy
5
9 7 11 17 13 5
No number can be output !
11 17 13 5

//#include<iostream>
//#include<algorithm>
//#include<string>
//#include<string.h>
//using namespace std;
//
//int main(){
//    int t = 0;
//    int a[10000];
//    scanf("%d",&t);
//    while(t--){
//        int n = 0,k = 0;// k 值记录失去的奇数的个数 
//        scanf("%d",&n);
//        while(n!= 1){//            if(n % 2){//                a[k++] = n;// 含原始的输出值,k 每次计算后为奇数则 k ++ 
//                n = 3 * n + 1;
//            }else{
//                n /= 2;
//            }
//        }
//        if(k){// 如果 k 值为 0, 证实除了原始数据之外,没有经计算后失去的为奇数的后果, 则将不会执行 if 语句 
//            for(int i = 0; i < k; i++){//                if(i == k - 1){//                    printf("%d\n",a[i]);// 最初一个值输入后须要换行 
//                }else{//                    printf("%d",a[i]);// 其余值输入须要空一格 
//                }
//            }
//        }else{// 如果 k 为 0(即除了原始数据没有失去奇数),则执行上面的语句,如果 k 非零 if 均为真,失常输入 
//            printf("No number can be output !\n");
//        }    
//    }
//    return 0;
//}

正文完
 0