例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;
}