山东大学23强基班计算机导论第六次习题答案

6-1 求数组中同为5和7的倍数的整数的个数

int Count_Digit(int a[],int N)
{
    int cnt = 0;
    for(int i = 0; i< N ; i++)
    {
        if( a[i] % 35 == 0)
            cnt ++;
    }
    return cnt;
}

7-2 求最大值及其下标

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

int main()
{
    vector<int> nums;
    
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int t;
        cin>>t;
        nums.push_back(t);
    }
    int addr = 0;
    int maxn = nums[0];
    for(int i = 1; i < nums.size(); i++)
    {
        if(nums[i] > maxn)
        {
            maxn = nums[i];
            addr = i;
        }
    }
    cout<<maxn<<' '<<addr;
}

例7-1 输出所有大于平均值的数

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

int main()
{
    vector<long long> nums;
    int n;
    cin>>n;
    if(n <= 0 || n>10)
    {
        cout<<"Invalid.";
        return 0;
    }
    long long sum = 0;
    while(n--)
    {
        long long t;
        cin>>t;
        nums.push_back(t);
        sum+=t;
    }
    double avg = sum /(double)nums.size();
    printf("%.2lf\n",avg);
    for(int i = 0;i<nums.size();i++)
    {
        if(nums[i]>avg)
        {
            cout<<nums[i]<<' ';
        }
    }
    cout<<endl;
}

例7-2 利用数组计算斐波那契数列

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

int main()
{
    int nums[64];
    nums[1] = nums[2] =1;
    int n;
    cin>>n;
    if(n<1 || n>46)
    {
        cout<<"Invalid.";
        return 0;
    }
    for(int i = 3;i<=n;i++)
    {
        nums[i] = nums[i-1]+nums[i-2];
    }
    for(int i = 1;i<=n;i++)
    {
        printf("%11d",nums[i]);
        if(i%5 ==0)
            cout<<endl;
    }
}

例7-3 查找满足条件的所有整数

#include <iostream>
using namespace std;

int main()
{
    long long n,x;
    cin>>n>>x;
    int flag = 0;
    for(int i = 0;i<n;i++)
    {
        int t;
        cin>>t;
        if(t == x){
            cout<<i<<endl;
            flag = 1;
        }
    }
    if(!flag)
        cout<<"Not Found";
}

例7-4-2 交换最小值

#include <iostream>
using namespace std;

int main()
{
    int N;
    cin>>N;
    int nums[16];
    for(int i=0;i<N;i++)
        cin>>nums[i];
    int addr =0;
    for(int i =0;i<N;i++)
    {
        if(nums[addr] > nums[i])
            addr = i;
    }
    if(addr == 0)
        goto OUT;
    nums[addr] ^= nums[0];
    nums[0] ^= nums[addr];
    nums[addr]^= nums[0];
OUT:
    for(int i=0;i<N;i++)
        cout<<nums[i]<<' ';
}

X7-1 选择法排序

#include <iostream>
using namespace std;

int main()
{
    int nums[16];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>nums[i];
    for(int i=0;i<n;i++)
    {
        int maxn = i;
        for(int j = i + 1;j<n;j++)
        {
            if(nums[j] > nums[maxn])
                maxn = j;
        }
        swap(nums[i],nums[maxn]);
    }
    for(int i=0;i<n - 1;i++)
    {
        cout<<nums[i]<<' ';
    }
    cout<<nums[n-1];
}

例7-7 二分查找法之过程

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

long long nums[32];

int main()
{
    long long n,x;
    cin>>n>>x;
    long long last = 0;
    cin>>nums[0];
    last = nums[0];
    for(int i=1;i<n;i++)
    {
        cin>>nums[i];
        if(last >= nums[i])
        {
            cout<<"Invalid Value";
            return 0;
        }
        last = nums[i];
    }
    int l = 0,r = n-1;
    do{
        int mid = (l+r)/2;
        printf("[%d,%d][%d]\n",l,r,mid);
        if(nums[mid] == x)
        {
            cout<<mid;
            return 0;
        } else if (nums[mid] > x) {
            r = mid - 1;
        } else
            l = mid + 1;
        
    }while(r >= l);
    cout<<"Not Found";
}

7-4 找出不是两个数组共有的元素

#include <iostream>
using namespace std;

int A[32],B[32];
int C[64];
int c;


int main()
{
    int a,b;
    cin>>a;
    for(int i=0;i<a;i++)
        cin>>A[i];
    cin>>b;
    for(int i=0;i<b;i++)
        cin>>B[i];
    int flag = 0;
    for(int i=0;i<a;i++){
        for(int j=0;j<b;j++)
            if(A[i] == B[j])
                goto END;
        for(int j=0;j<c;j++)
            if(A[i]==C[j])
                goto END;
        if(flag)
            cout<<' ';
        else
            flag=1;
        cout<<A[i];
        C[c++]=A[i];
        END:;
    }
    for(int i=0;i<b;i++){
        for(int j=0;j<a;j++)
            if(B[i]==A[j])
                goto END2;
        for(int j=0;j<c;j++)
            if(B[i]==C[j])
                goto END2;
        if(flag)
            cout<<' ';
        else
            flag=1;
        cout<<B[i];
        C[c++]=B[i];
        END2:;
    }
}

-2 求一批整数中出现最多的个位数字

#include <iostream>
using namespace std;

int N[10];

int main()
{
    int n;
    cin>>n;
    char c = 0;
    while(cin>>c)
    {
        if(c>='0' && c<='9')
        {
            N[c-'0']++;
        }
    }
    int maxn = 0;
    for(int i=1;i<=9;i++)
        if(N[maxn]<N[i])
            maxn = i;
    cout<<N[maxn]<<':';
    for(int i=0;i<=9;i++)
    {
        if(N[maxn] == N[i])
            cout<<' '<<i;
    }
}
posted @ 2024-04-19 16:13  Icys  阅读(54)  评论(0编辑  收藏  举报