一本通编程启蒙例36及练习题解

例36.1

算法思路
1.输入矩阵的行列数n,m

2.初始化结果和sum

3.遍历矩阵,输入每个元素值

4.分别遍历第一行、最后一行、第一列和最后一列,将元素值加到sum中

5.由于角落元素重复计算,需要减去角落元素的值

6.输出结果和sum

#include<bits/stdc++.h>
using namespace std;

int main() {

  // 输入行数n和列数m
  int n, m;  

  // 初始化和sum
  int sum = 0;

  cin >> n >> m;

  // 遍历矩阵并输入元素
  for(int i = 1; i <= n; i++) {
  for(int j = 1; j <= m; j++) {
    cin >> a[i][j]; 
  }
  }

  // 添加第一行的元素
  for(int j = 1; j <= m; j++) {
  sum += a[1][j];
  }

  // 添加最后一行的元素
  for(int j = 1; j <= m; j++) {
  sum += a[n][j]; 
  }

  // 添加第一列的元素
  for(int i = 1; i <= n; i++) {
  sum += a[i][1];
  }

  // 添加最后一列的元素
  for(int i = 1; i <= n; i++) {
  sum += a[i][m];
  }

  // 减去重复添加的角落元素
  sum -= a[1][1] - a[1][m] - a[n][1] + a[n][m];

  // 输出和sum
  cout << sum;

  return 0;

}

例36.2

算法思路
1.输入n和x

2.循环1到n每个数i

3.将i转化为字符串temp

4.循环temp,判断个位是否等于x

5.等于则sum++

6.输出sum

#include<bits/stdc++.h>

int main() {

  //输入n和x
  cin >> n >> m;  

  //初始化结果
  long long sum = 0;

  //循环每个数i
  for(int i=1; i<=n; i++) {

  //将i转字符串
  long long temp = i;  

  //循环temp个位
  while(temp) {

    //判断个位是否等于x
    if(temp%10 == m)  
    sum++;

    //取下一个位    
    temp /= 10;

  }

  }

  //输出结果
  cout << sum;

  return 0;

}

例36.3

算法思路
1.输入n

2.判断n是否等于1,如果是输出"No"

3.从n开始逆序遍历每个数i

4.调用isPrime函数判断i是否为质数

5.如果是质数直接输出i并结束

6.遍历结束也没有质数直接结束
判断质数函数
1.输入一个数n

2.判断特殊情况如n小于2

3.用i从2到sqrt(n)遍历所有可能因数

4.如果有因数返回false,否则返回true

#include <bits/stdc++.h>
using namespace std;

//定义长整型类型避免溢出
typedef long long l;

//质数判断函数  
bool isPrime(l n) {

  //处理特殊情况
  if(n < 2) return false;   

  //遍历所有可能因数
  for(l i = 2; i*i <= n; i++)
  if(n%i == 0)
    return false;

  return true;

}

int main() {

  //输入数字n
  l n;  

  cin >> n;

  //处理特殊情况n==1
  if(n == 1) {
  cout << "No";
  return 0;
  }

  //从n开始逆序遍历
  for(l i=n; i>=2; i--) {   

  //调用质数判断函数
  if(isPrime(i)) {    
    cout << i;
    return 0;
  }

  }

  //返回主函数
  return 0;

}

练36.1

算法思路
1.定义结构体存储矩阵每个元素

2.使用循环输入3行矩阵元素

3.初始化结果和sum

4.直接访问对角线元素a[1].d、a[2].c、a[3].b相加

5.输出结果和sum

#include<iostream>

struct Node{
  long long d,b,c;
}a[4];

int main(){

  //输入矩阵元素
  for(i=1;i<=3;i++)  
  cin>>a[i].b>>a[i].c>>a[i].d;

  //结果和  
  long long sum = 0;

  //相加对角线元素
  sum = a[1].d + a[2].c + a[3].b;

  //输出结果
  cout<<sum;

  return 0;
}

练36.2

算法思路
1.输入方程系数a,b,c

2.初始化结果计数count和x,y最大值maxa,maxb

3.计算x,y最大值

4.循环x从0到maxa

5.内循环y从0到maxb

6.判断当x,y值是否满足方程

7.满足则计数count+1

8.输出结果count

// 不定线性方程非负整数解组数问题

#include <iostream>
using namespace std;

int main() {

  // 输入方程系数
  int a, b, c;   

  // 初始化结果计数和最大值变量
  int count = 0, maxa, maxb;   

  cin >> a >> b >> c;

  // 计算x,y的最大值
  maxa = c/a;
  maxb = c/b;

  // 外循环x从0到最大值
  for(int i=0; i<=maxa; i++)  

   // 内循环y从0到最大值
   for(int j=0; j<=maxb; j++)

   // 判断x,y是否满足方程   
   if(a*i + b*j == c)  

     // 满足则计数加1
     count++;
     
  // 输出结果     
  cout << count;

  // 返回主函数
  return 0;

}

练36.3

嗯…遇到这种题不要慌,直接复制粘贴输出就行了…

#include <iostream>
using namespace std;
typedef long long l;

l n, sum;

int main() {
    cout << "1*1= 1\n2*1= 2 2*2= 4\n3*1= 3 3*2= 6 3*3= 9\n4*1= 4 4*2= 8 4*3=12 4*4=16\n5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25\n6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36\n7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49\n8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64\n9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81";

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值