1. 程式人生 > >學校oj題 12.19

學校oj題 12.19

題目描述
線上性代數、計算幾何中,向量點積是一種十分重要的運算。
給定兩個n維向量a=(a1,a2,…,an)和b=(b1,b2,…,bn),求點積a·b=a1b1+a2b2+…+anbn。
要求定義函式,引數為陣列a,b,求向量a和b的點積並返回計算結果。
未定義函式,不計分。
輸入
第一行是一個整數n。1 <= n <= 1000。
第二行包含n個整數a1,a2,…,an。
第三行包含n個整數b1,b2,…,bn。
相鄰整數之間用單個空格隔開。每個整數的絕對值都不超過1000
輸出
一個整數,即兩個向量的點積結果
樣例輸入
3
1 4 6
2 1 5
樣例輸出
36

很水的題,按照題意來就可以了
AC程式碼如下:

#include <iostream>
using namespace std;
const int maxn=1e3+5;
int a[maxn];
int b[maxn];
int func(int n,int a[],int b[])
{
    int sum=0;
    for(int i=0;i<n;i++)
        sum+=a[i]*b[i]; //計算積
    return sum; //最後返回積
}
int main()
{
    int n;
    cin>>n;
        for
(int j=0;j<n;j++) cin>>a[j]; for(int i=0;i<n;i++) cin>>b[i]; cout<<func(n,a,b)<<endl; return 0; }

題目描述
有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數,見圖。寫一函式:實現以上功能,在主函式中輸入n個數和輸出調整後的n個數。
輸入
輸入資料的個數n n個整數移動的位置m
輸出
移動後的n個數
樣例輸入
10
1 2 3 4 5 6 7 8 9 10
2
樣例輸出


9 10 1 2 3 4 5 6 7 8

很水,思考一下其實也不需要模擬交換操作,直接從 n-m那個數開始輸出就可以了
ac程式碼如下:

#include <iostream>
using namespace std;
void print(int n,int m,int a[])
{
    for(int i=n-m,j=0;j<n;j++)
        cout<<a[(i+j)%n]<<' ';
    cout<<endl;
    return ;
}
int main()
{
    int n,m;
    int a[1005];
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    cin>>m;
    print(n,m,a);
    return 0;
}