第十二周程序设计课解题报告

来源:互联网 发布:ios助手for mac 编辑:程序博客网 时间:2024/05/01 21:28
第十二周程序设计课解题报告
这周解题报告有点赶,请见谅 
1000.sorted?
题目大意:写一个函数判断给定的数列是否非下降序列
解:注意处理边界情况,如循环是否会访问到数组以外的数,相邻两个数的大于小于号判断是否带等号


bool isSorted(const int list[], int size){
    for (int i=0; i<size-1; i++)
        if (list[i]>list[i+1]) {
            return false;
        }
    return true;
}          

1001.!@#¥%……&*(
题目大意:将给定的两个升序数列合并成一个新的升序数列
解:这题不需要排序。因为两个子序列是升序的,那么当前新数列的最大数必定出自两个子序列的第一个数中的更小的一个,提取了数后就得到了两个新的子序列,仍然保持升序,所以可以不断重复这个过程。便得到了新生成的升序数列。
(注意第三个list3前面不能带const 


void merge(const int list1[], int size1, const int list2[], int size2, int list3[]){
    int left, right, now;
    left=right=now=0;
    while (left<size1 || right < size2){
        if (left<size1 && right< size2){
            if (list1[left]<list2[right]){
                list3[now]=list1[left++];
            }
            else list3[now]=list2[right++];
        }
        else if (left<size1){
            list3[now]=list1[left++];
        }
        else if (right<size2)
            list3[now]=list2[right++];
        now++;
    }
}                                  


1002、1003.sort
题目大意:将给定的数组排为升序 ,数据范围不同。
其实两个都用桶排序即可,但是我偷懒直接用sort了=W=

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>

using namespace std;

int a[1111111], n;

int main(){
    scanf("%d", &n);
    for (int i=1; i<=n; i++) scanf("%d", &a[i]);
    sort(a+1, a+1+n);
    for (int i=1; i<=n; i++) printf("%d\n", a[i]);
}         

1004.T-primes
题目大意:若某个数因数分解后得到三个因数(注意是因数而非质因数)的话命名为T-primes。输入n个数判断当中有多少个T-primes
解:分析后可知t-primes肯定是一个完全平方数。而且他的开方一定得是质数。只要满足这两个条件。必定是t-primes。用函数实现判断会好看很多。
(记得用long long                       
 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>

using namespace std;

long long a[11111], n;

bool check(long long x){
    if (x==1) return false;
    long long lab=trunc(sqrt(x));
    if (lab*lab==x) {
        for (int i=2; i<=trunc(sqrt(lab)); i++)
            if (lab%i==0) return false;
        return true;
    }
    else return false;
}

int main(){
    scanf("%d", &n);
    for (int i=1; i<=n; i++) scanf("%lld", &a[i]);
    int ans=0;
    for (int i=1; i<=n; i++) if (check(a[i])) {
        ans++;
    }
    cout << ans << endl;
}                                  
0 0