第四讲 数组

第四章 数组

4 AcWing 743 数组的行

a, b, c = int(input()),input(),[[float(x) for x in input().split()] for i in range(12)]
print('%.1lf'%(sum(c[a]) if b=='S' else sum(c[a])/12))
#分项定义语句
#基础数据读取与转换 列表类型使用及简写

5 AcWing 745 数组的右上半部分

a, b ,c= input(),[[float(y) for y in input().split()] for x in range(12)],0.
for i in range (12):
    for j in range(12):
        if (j>i):
            c+=b[i][j];
# c = sum([sum([i[x][y] for y in range(x+1,12)]) for x in range(12)])//该种写法也可以
print("%.1lf"%(c if a=='S' else c/((1+11)/2*11)))

6 AcWing 数组的左上半部分

a, b, ans = input(),[[float(x) for x in input().split()] for x in range(12)], 0.0
ans = sum([sum([b[x][y] for y in range(0,11-x)]) for x in range(12)])
print("%.1lf"%(ans if (a=='S') else ans/66))

7 AcWing 数组的上方区域

a, b, ans = input(),[[float(y) for y in input().split()] for i in range(12)], 0. 
for i in range(12):
    for j in range(12):
        if(j>i and i+j <11):
            ans += b[i][j]
# ans = sum([sum([b[i][j] for j in range(i+1,11-i)]) for i in range (5)])
# print("%.1lf"%(ans if a=='S' else ans/30))
print("%.1lf"%(ans if a=='S' else ans/30))

8 AcWing 数组的左方区域

a, b, c = input(), [[float(y) for y in input().split()] for i in range(12)] ,0.
#c = sum([sum([b[i][j] for i in range(j+1, 11-j)]) for j in range(5)])
for i in range(12):
    for j in range(12):
        if(i>j and i+j <11):
            c+=b[i][j]
print("%.1f"%(c if a=='S'else c/30))

9 763.平方矩阵

  • C++版本
#include<iostream>
#include<algorithm>
using namespace std;
bool minmap(int a, int b)
{
    return a < b;
}
int main()
{
    int n;
    while(cin>>n){
        if(n==0) break;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                // int d=min(min(i+1,j+1),min(n-i,n-j));
                int d = min({i+1,j+1,n-i,n-j});//min()函数用法
                cout<<d<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
       
    }
    
    return 0;
}
  • Python版本
n=int(input())
while(n):
    for i in range(n):
        for j in range(n):
            print("%d "%(min(i+1, j+1,n-i,n-j)),end='')
        print()
    print()
    n = int(input())

10 740数组变换

#方法1 注意两种读取方式数据类型 方法2更优
a = [[int(y) for y in input().split()] for i in range(20)]
b = list(reversed(a))
for i in range(20):
    print("N[%d] = %d"%(i,b[i][0]))
#方法2 
a = list(reversed([int(input()) for x in range(20)]))
for i in range(20):
    print("N[%d] = %d"%(i,a[i]))

11 741 斐波那契数列

  • 斐波那契通项公式(Fib)

F_n = \frac{1}{\sqrt{5}}[(\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^n]

#include<iostream>
using namespace std;
const int N = 100;
int main()
{
    int n;
    long int a[N]={0,1};
    for(int i=2;i<N;i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    cin>>n;
    while(n--)
    {
        int i;
        cin>>i;
        printf("Fib(%d) = %ld\n",i,a[i]);
    }
    return 0;
    
}
# 第一种方法
n = int(input())
b = [0,1]
for i in range(2,62):
    b.append(b[i-1]+b[i-2])
for i in range(n):
    a = int(input())
    print("Fib(%d) = %d"%(a,b[a]))
# 第二种方法
for x in range(int(input())):
    a, d = int(input()), 5**0.5
    print("Fib(%d) = %d"%(a,(1/d)*(((1+d)/2)**a-((1-d)/2)**a)))
//出现问题
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    
    double c = sqrt(5);
    int n;
    cin>>n;
    while(n--)
    {
        int a;
        cin>>a;
        //cout<<(pow((1.0+c)/2.0,a)-pow((1.0-c)/2.0,a))*1.0/c<<endl;
        printf("Fib(%d) = %ld\n",a,int((pow((1.0+c)/2.0,a)-pow((1.0-c)/2.0,a))*1.0/c));
        //printf("Fib(%d) = %ld\n",a,(1.0/c)*((pow((1.0+c)/2.0,a)-pow((1.0-c)/2.0,a))));
    }
}


//正常
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    
    double c = sqrt(5);
    int n;
    cin>>n;
    while(n--)
    {
        int a;
        cin>>a;
        long long int x =(pow((1.0+c)/2.0,a)-pow((1.0-c)/2.0,a))*1.0/c;
        //cout<<(pow((1.0+c)/2.0,a)-pow((1.0-c)/2.0,a))*1.0/c<<endl;
        printf("Fib(%d) = %ld\n",a,x);
        //printf("Fib(%d) = %ld\n",a,(1.0/c)*((pow((1.0+c)/2.0,a)-pow((1.0-c)/2.0,a))));
    }
}

742 最小数和它的位置

  • 如何读取数据 并将单行数据转换成整数类型
  • Python中 min 函数 index 函数的用法
n = input()
a = [int(x) for x in input().split()]
print("Minimum value: %d\nPosition: %d"%(min(a),a.index(min(a))))
  • vector 容器插入元素做法、
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    vector<int> a;
    int n,b;
    cin>>n;
    for(int i =0;i<n;i++){
        cin>>b;
        a.push_back(b);
    }
    int min = *min_element(a.begin(),a.end());
    int index = min_element(a.begin(),a.end())-a.begin();
    printf("Minimum value: %d\nPosition: %d",min,index);
    return 0;

}

数组中的列

#include<iostream>
using namespace std;
const int N=12;
double a[N][N],sum=0;
int main()
{
    int n;
    char c;
    cin>>n>>c;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++){
            cin>>a[i][j];
        }
    }
    for(int j=0;j<N;j++){
        sum+=a[j][n];
    }
    if(c=='S')printf("%.1lf",sum);
    else printf("%.1lf",sum/12);
    return 0;
    
}
a,b,c,d=int(input()),input(),[[float(y) for y in input().split()] for i in range(12)],0.
x= sum([c[i][a] for i in range(12)])
print("%.1f"%(x if b=='S' else x/12))

数组的右下半部分

a,b=input(),[[float(y) for y in input().split()] for i in range(12)]
ans = sum([sum([b[i][j] for j in range(12-i,12)]) for i in range(12)])#(12-i,12)
print("%.1f"%(ans if a=='S' else ans/66))

数组的左下半部分

a,b =input(),[[float(y) for y in input().split()] for i in range(12)]
c = sum([sum([b[i][j] for j in range(i)]) for i in range(12)])
print("%.1lf" %(c if a=='S' else c/66))

数组的下方区域

数组的右方区域

平方矩阵2

a=int(input())
while(a):
    #print(a)
    a=int(input())
    for i in range(a):
        for j in range(a):
            print("%d"%(abs(i-j)+1),end=' ')
        print()
    print()
    
    
## 方法二 注意比较
while 1:
    n=int(input())
    if not n:
        break
    ans=[[0 for i in range(n)] for i in range(n)]
    i,j,num=0,0,1
    while i<n:
        ans[i][j]=num
        num+=1
        j+=1
        if j==n:
            j=i+1
            i+=1
            num=1
    for i in range(1,n):
        for j in range(i):
            ans[i][j]=ans[j][i]
    for i in range(n):
        print(*ans[i],sep=" ")
    print()


//方法一
#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n,n!=0){
        int a[n][n]={0};
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                a[i][j]=j-i+1;
            }
            for(int j=0;j<i;j++){
                a[i][j]=a[j][i];
            }
        }
        // for(int i=1;i<n;i++){
        //     for(int j=0;j<i;j++){
        //         a[i][j]=8;
        //     }
        // }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
}
//方法二
#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n,n){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cout<<abs(i-j)+1<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

平方矩阵3

  • pow作用求幂 #include<cmath>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

int main(){
    int n,x;
    while(cin>>n,n)
    {
       for(int i=0;i<n;i++){
           for(int j=0;j<n;j++){
               x = pow(2,i+j);
               cout<<x<<" ";
           }
           cout<<endl;
       }
       cout<<endl;
    }
    return 0;
}

756 蛇形矩阵

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容