当前位置:首页 > 未分类 > 正文内容

基础语法数组的练习

admin1年前 (2024-12-18)未分类417

基础语法数组的练习

作者:xinyi

第一题 数组替换

题目链接https://www.acwing.com/problem/content/739/

核心思路:定义长度为 10 的数组,输入 10 个整数,若输入值≤0 则替换为 1,最后按指定格式输出数组元素。

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

int main(){
   
   int x[10];
   int n;
   for (int i=0;i<=9;i++){
       cin >>n;
       if(n<=0) x[i]=1;
       else x[i]=n;
       printf("X[%d] = %d\n",i,x[i]);
   }
   
   return 0;
   
}

第二题 数组填充

题目链接https://www.acwing.com/problem/content/740/

核心思路:输入初始值v,数组第 1 个元素为v,后续元素为前一个元素的 2 倍,循环填充 10 个元素后按格式输出。

#include <cstdio>
#include <iostream>

using namespace std;

int main(){
   
   int v;
   int a[10];
   cin >>v;
   for(int i = 1;i<10;i++){
       a[0]=v;
       a[i]=a[i-1]*2;
   }
   for(int i=0;i<10;i++){
       printf("N[%d] = %d\n",i,a[i]);
   }
   
   return 0 ;
}

第三题 数组选择

题目链接https://www.acwing.com/problem/content/741/

核心思路:定义长度为 100 的双精度数组,输入 100 个数值后,筛选出≤10 的元素并按指定格式输出(保留 1 位小数)。

#include <cstdio>
#include <iostream>

using namespace std;

int main(){
   
   double a[100];
   double n;
   for (int i=0;i<100;i++){
       cin>>n;
       a[i]=n;
   }
   for(int i=0;i<100;i++){
       
       if(a[i]<=10)printf("A[%d] = %.1lf\n",i,a[i]);
   }
   
   return 0;
}

第四题 数组中的行

题目链接https://www.acwing.com/problem/content/745/

核心思路:定义 12×12 的双精度二维数组,输入指定行号l和操作符S(求和)/M(求平均),计算该行所有元素的和或平均值并输出。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   int l;
   char input;
   double m[12][12];
   int n;
   cin>>l>>input;
   for(int i= 0 ;i<12;i++){
       for(int j=0;j<12;j++){
           cin>>m[i][j];
           //m[i][j]=n
       }
   }
   double sum=0;
   for(int i=0;i<12;i++){
       sum+=m[l][i];
   }
   if(input=='S')cout<<sum<<endl;
   else printf("%.1lf",sum/12);
   return 0;
}

第五题 数组的右上半部分

题目链接https://www.acwing.com/problem/content/747/

核心思路:定义 12×12 的双精度二维数组,计算并输出右上半部分(列号 > 行号)元素的和(S)或平均值(M),平均值保留 1 位小数。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   char n;
   cin>>n;
   double a[12][12];
   for(int i = 0;i<12;i++)
       for(int j=0;j<12;j++)
           cin>>a[i][j];
           
   double s=0;
   double sum=0;
   for(int i=0;i<12;i++){
       
       for (int j=i+1;j<12;j++){
           s++;
           sum+=a[i][j];
       }
       
   }
   if(n=='S')cout <<sum;
   else printf("%.1lf",sum/s);
   
       
   return 0;
}

第六题 数组的左上半部分

题目链接https://www.acwing.com/problem/content/749/

核心思路:定义 12×12 的双精度二维数组,计算并输出左上半部分(行号 + 列号≤10)元素的和(S)或平均值(M),平均值保留 1 位小数。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   char n;
   cin>>n;
   double a[12][12];
   for(int i = 0;i<12;i++)
       for(int j=0;j<12;j++)
           cin>>a[i][j];
           
   double s=0;
   double sum=0;
   for(int i=0;i<12;i++){
       
       for (int j=0;j<12;j++){
           if(i+j<=10){
           s++;
           sum+=a[i][j];}
       }
       
   }
   if(n=='S')cout <<sum;
   else printf("%.1lf",sum/s);
   
       
   return 0;
}

第七题 数组的上方区域

题目链接https://www.acwing.com/problem/content/751/

核心思路:定义 12×12 的双精度二维数组,计算并输出上方区域(行号 0~5,列号 > 行号且行号 + 列号 < 11)元素的和(S)或平均值(M),平均值保留 1 位小数。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   char n;
   cin>>n;
   double a[12][12];
   for(int i = 0;i<12;i++)
       for(int j=0;j<12;j++)
           cin>>a[i][j];
           
   double s=0;
   double sum=0;
   for(int i=0;i<5;i++){
       
       for (int j=i+1;j+i<11;j++){
           s++;
           sum+=a[i][j];
       }
       
   }
   if(n=='S')cout <<sum;
   else printf("%.1lf",sum/s);
   
       
   return 0;
}

第八题 数组的左方区域

题目链接https://www.acwing.com/problem/content/753/

核心思路:定义 12×12 的双精度二维数组,分两部分计算左方区域元素(行号 1~5 时列号≤行号 - 1;行号 6~10 时列号≤10 - 行号)的和(S)或平均值(M),平均值保留 1 位小数。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   char n;
   cin>>n;
   double a[12][12];
   for(int i = 0;i<12;i++)
       for(int j=0;j<12;j++)
           cin>>a[i][j];
           
   double s=0;
   double sum=0;
   for(int i=1;i<=5;i++){
       
       for (int j=0;j<=i-1;j++){
           s+=1;
           sum+=a[i][j];
       }
       
   }
   for(int i=6;i<=10;i++){
       
       for (int j=0;j<=10-i;j++){
           s+=1;
           sum+=a[i][j];
       }
   }
   
   if(n=='S')cout <<sum;
   else printf("%.1lf",sum/s);
   
       
   return 0;
}

第九题 平方矩阵

题目链接https://www.acwing.com/problem/content/755/

说明:题目要求生成边长为n的平方矩阵,每个元素值为该元素到矩阵边界的最小距离(如边界元素为 1,向内逐层递增),代码中通过min(min(i + 1, j + 1), min(n - i, n - j))计算该距离,循环输入n直到n=0结束。

#include <iostream>
#include <cmath>

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 << min(min(i + 1, j + 1), min(n - i, n - j)) << " ";
           }
           cout << endl ;
       }
       cout << endl;
   }

   return 0;
}

第十题 数组变换

题目链接https://www.acwing.com/problem/content/742/

核心思路:输入 20 个整数存入数组a,将a逆序存储到数组b中(如a[19]存到b[0],a[18]存到b[1]),最后按指定格式输出b的元素。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   int a[20],b[20];
   for(int i =0;i<20;i++)cin >>a[i];
   for(int i=19,j=0;i>=0;i--,j++) b[j]=a[i];//这里的j也可以换成19-i,最终结果一致均可AC
   for(int i=0;i<20;i++) printf("N[%d] = %d\n",i,b[i]);
   return 0;
   
}

第十一题 斐波那契数列

题目链接https://www.acwing.com/problem/content/743/

关键注意事项:斐波那契数列第 60 项数值较大,int类型会溢出,需使用long long类型存储数组元素。

辅助截图

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   long long a[60];
   a[0]=0,a[1]=1;
   for(int i=2;i<60;i++)a[i]=a[i-1]+a[i-2];
   int n;
   cin >>n;
   while(n--){
   int x;
   cin >>x;
   printf("Fib(%d) = %lld\n",x,a[x]);}
   return 0;
}

第十二题 最小数和它的位置

题目链接https://www.acwing.com/problem/content/744/

核心思路:输入n个整数存入数组,遍历数组找到最小值及其索引(位置),最后按指定格式输出最小值和位置。

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
   
   int n;
   int a[1001];
   cin>>n;
   for(int i=0;i<n;i++) cin>>a[i];
   int p=0;
   for (int i=1;i<n;i++){
       if(a[i]<a[p]) p=i;
       
   }
   printf("Minimum value: %d\n",a[p]);
   printf("Position: %d",p);
   return 0;
}

若你后续想对某道题的代码添加详细注释(比如解释关键逻辑),或者需要补充其他数组相关的练习题转换,都可以告诉我,我会进一步优化内容,让代码和思路更易理解。


扫描二维码推送至手机访问。

版权声明:本文由克拉玛依三十年社团发布,如需转载请注明出处。

本文链接:https://www.klmyssn.com/?id=76

分享给朋友:
返回列表

上一篇:基础语法练习

没有最新的文章了...

“基础语法数组的练习” 的相关文章

(原创)求人不如求己 -- 剪辑音乐就是这么简单 [如何剪辑音乐]

(原创)求人不如求己 -- 剪辑音乐就是这么简单 [如何剪辑音乐]

每每到了学校有活动,需要播放歌曲时,QQ 就多几个好友,消息又 99+,不消问什么事情,就知道是找我剪辑歌曲的同学了。怎么说,我这人对别人提出的需求,都尽力去帮助的,在剪辑音乐这事情上,从没拒绝过,但年复一年,每次剪辑音乐其实很简单,但是量多,就比较影响自己时间了,我又不会拒绝别人,很是尴尬,所以在...

小讲堂心得

小讲堂心得

参加小讲堂活动,是受邀两位学习部的同学十分热情的邀请,为同学们讲讲网络安全方面的知识。我感到十分荣幸,但又有些许担忧,怕讲不好,因为网络安全这个学科涉及的知识面十分宽泛,网络安全从其本质上来讲就是网络上的信息安全。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理...

(原创)还在用软件翻墙?看我几秒搞定!

首先说下原理,修改设备 hosts 文件信息,将各大国外网站域名直接指向服务器 ip,绕过国家的 GFW 防火墙,从而可以访问 Google、Facebook、ebay、YouTube、Yahoo、、、太多还是不打了,自己测试-------------------------------------...

(原创)sqlmap 注入初级教程 [sqlmap][sqlmap 指令][sqlmap 怎么用]

(原创)sqlmap 注入初级教程 [sqlmap][sqlmap 指令][sqlmap 怎么用]

一、熟悉 sqlmap 之路:核心注入场景与方法1. Sqlmap 之 Post 注入Post 注入适用于表单提交(如登录页、数据提交页)等场景,核心是通过抓取 Post 请求数据进行注入测试,以下为 4 种常用方法:方法一:基于请求文件(-r 参数)# 基础用法(请求文件与sqlmap同目录)sq...

(原创) 校园卡破解系列之数据修改 [pm3 破解饭卡][pm3 修改数据][校园卡修改][IC 卡修改数据]

(原创) 校园卡破解系列之数据修改 [pm3 破解饭卡][pm3 修改数据][校园卡修改][IC 卡修改数据]

(二)吃不完的饭卡提升完 IC 卡权限,就该考虑能不能修改饭卡金额了。通过两次消费前后饭卡数据的对比分析,发现虽然卡片数据包含较多扇区和区块,但消费前后变化的地方仅涉及两个扇区,这为后续分析提供了便利。通过十六进制与十进制转换,可进一步拆解变化的数据:消费后金额:373.2(数字:37320;16...

(原创)Powershell And Metasploit (上)

(原创)Powershell And Metasploit (上)

00x01 #题外话作者: 墨 (X_Al3r)即刻安全:www.secist.com十三年社团:www.klmyssn.com一篇不知道该用什么名字的文章!00x02 #什么是 PowershellPowerShell 一般指 Windows Power ShellPowershell 是 Mic...