问题A 守形数

题目大意
给一个整数N(2≤N<100),判断N平方后的数的地位部分是否为N。
例:25225^2252=625,低位部分是25,则25是守形数。

思路
首先得出N的位数w,接着用N对10m10^m10m求余,判断余数是否等于N。

代码

#include <iostream>
#include<stdio.h>
#include<cstdio>
#include<math.h>
#include<algorithm>
using namespace std;int weishu(int n){int k=1;//标记n的位数while(n){if(n/10!=0){k++;}n=n/10;}return k;
}int main(int argc, const char * argv[]) {int n;while(scanf("%d",&n)!=EOF){int square=n*n;int ten=pow(10, weishu(n));if(square%ten==n){printf("Yes!\n");}else{printf("No!\n");}}return 0;
}

问题B 反序数/问题I 反序相等

题目大意
一个四位数N,它的9倍刚好是它的反序数,求满足与反序数存在9倍关系的所有N的值。
反序数的概念:1234的反序数4321

思路
对四位数进行遍历,将4位数的各数位逆序存入数组,接着将数组内的数转化为int型的数值,再进行判断是否存在9倍关系。

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;//逆序存到数组里
void to_array(int n,int A[]){for(int i=0;i<4;i++){A[i]=n%10;n=n/10;}
}//将数组里面的数专为int数值
int to_num(int A[]){int num=0;for(int i=0;i<4;i++){num=num*10+A[i];}return num;
}int main(int argc, const char * argv[]) {for(int i=1000;i<10000;i++){int A[4];to_array(i, A);
//        for(int j=0;j<4;j++)
//            printf("%d ",A[j]);
//        printf("%d\n",to_num(A));if(i*9==to_num(A)){printf("%d\n",i);}}return 0;
}

问题C 百鸡问题

题目大意
用n元去买100只鸡。有5元/只、3元/只、13{1\over3}31​元/只的三种价格的鸡,分别买x,y,z只。求解所有满足的x,y,z的值。

思路
x+y+z=100;
5x+3y+z3{z\over3}3z​≤n;
x,y,z∈Z+Z_+Z+​
建立双重循环,对x从0开始循环,限制条件是≤n5n\over55n​;内层对y从0开始循环,限制条件是≤100-x;循环内部z=100-x-y直接使满足百只鸡的条件,之后再判断钱够不够。

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {int n;int x,y,z;double sum;while(scanf("%d",&n)!=EOF){sum=0;for(x=0;x<=n/5;x++){for(y=0;y<=100-x;y++){z=100-x-y;sum=5*x+3*y+(z*1.0)/3;if(sum<=n)printf("x=%d,y=%d,z=%d\n",x,y,z);}}}return 0;
}

问题D abc/问题G 加法等式

题目大意
两个三位数分别为abc、bcc,并且abc+bcc=532,求所有满足条件的a、b、c。

思路
因为两个数都是三位数,所以a和b肯定不等于0。
三重循环遍历验证

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {int a,b,c;int num1,num2;for(a=1;a<10;a++){for(b=1;b<10;b++){for(c=0;c<10;c++){num1=a*100+b*10+c;num2=b*100+c*10+c;if(num1+num2==532)printf("%d %d %d\n",a,b,c);}}}return 0;
}

问题E 众数

题目大意
找出20个数中出现次数最多的数,若有多个众数,则输出值最小的那个。

思路
用结构体,结构体属性有值和次数。
输入完成后,对结构体按照次数从多到少进行排序(次数一样的按照值从小到大排序)
最后输出第一个值即可。

过程中犯的错误
忽略了题目要求的多组测试数据

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;struct number{int value;int count=0;
};bool cmp(number x,number y){if(x.count==y.count)return x.value<y.value;elsereturn x.count>y.count;
}int main(int argc, const char * argv[]) {number num[11];int n;while (scanf("%d",&n)!=EOF){//不可以写while(true)for(int i=1;i<11;i++){num[i].value=i;num[i].count=0;}num[n].count++;for(int i=1;i<20;i++){scanf("%d",&n);num[n].count++;}sort(num+1,num+11,cmp);printf("%d\n",num[1].value);}return 0;
}

问题F 计算两个矩阵的乘积

题目大意
计算一个23矩阵与一个32矩阵的乘积

思路
两个2维数组存数据,循环计算。

过程中犯的错误
循环计算的变量逻辑没有理清楚,导致计算错误。

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {int matrix1[2][3];int matrix2[3][2];int n;while(scanf("%d",&n)!=EOF){int res[2][2]={0};for(int i=0;i<2;i++){for(int j=0;j<3;j++){if(i==0&&j==0)matrix1[i][j]=n;elsescanf("%d",&matrix1[i][j]);}}for(int i=0;i<3;i++){for(int j=0;j<2;j++){scanf("%d",&matrix2[i][j]);}}for(int i=0;i<2;i++){for(int j=0;j<2;j++){for(int k=0;k<3;k++)res[i][j]=res[i][j]+matrix1[i][k]*matrix2[k][j];}}for(int i=0;i<2;i++){for(int j=0;j<2;j++){printf("%d ",res[i][j]);}printf("\n");}}return 0;
}

问题H 整数和

题目大意
给一个整数N,当N为非负数,计算N到2N的和;当N为负数,计算2N到N的和。

思路
整数求和公式,负数时先当做整数求,最后加个负号。
注意:项数是N+1,不是N。

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {int m,N;scanf("%d",&m);while(m--){scanf("%d",&N);if(N>0){printf("%d\n",3*N*(N+1)/2);}else{printf("%d\n",-3*(-N)*(-N+1)/2);}}return 0;
}

问题J 多项式的值

题目大意
给出一个多项式从0次到n次的各项系数,以及自变量x的值,求解最后的值。

思路
数组存储系数,循环相乘求和,依次给x升次。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {int m,n,x;scanf("%d",&m);while (m--) {scanf("%d",&n);int factor[11]={0};for(int i=0;i<=n;i++)scanf("%d",&factor[i]);scanf("%d",&x);int pow=1;int sum=0;for(int i=0;i<=n;i++){sum+=factor[i]*pow;pow*=x;}printf("%d\n",sum);}return 0;
}

问题K 迭代求立方根

题目大意
已知迭代方程,给出x的值以及迭代n次,求迭代后的结果。

思路
循环求值。

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {double x;int n;while (scanf("%lf%d",&x,&n)!=EOF) {double y=x;for(int i=1;i<n+1;i++){y=y*2/3+x/(3*y*y);}printf("%.6lf\n",y);}return 0;
}

问题L 与7无关的数

题目大意
给定n(n<100),求(0,n]之间既不是7的整数倍,各个数位上也没有7的数的平方和。

思路
对(0,n]进行循环遍历,满足条件的即平方求和,最后得到结果。
或者先将(0,100)之间所有与7无关的数都标记出来,之后循环平方求和。

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;int A[100];void seven(int A[]){for(int i=0;i<100;i++){if(i%7==0||i/10==7||i%10==7){A[i]=0;}else{A[i]=1;}}
}int main(int argc, const char * argv[]) {int n;int sum;seven(A);while(scanf("%d",&n)!=EOF){sum=0;for(int i=0;i<n+1;i++){//            if(i%7!=0&&i%10!=7&&i/10!=7){//                sum+=i*i;
//            }if(A[i]){sum+=i*i;}}printf("%d\n",sum);}return 0;
}

问题M 鸡兔同笼

题目大意
已知共有a只脚,求最多有多少动物,最少有多少动物。

思路
当a是奇数时,肯定不可能;
当a是偶数时,

  • 最多的情况肯定都是鸡,也就是a2{a\over2}2a​只;
  • 最少的情况(理想化地)都是兔,这就存在一个a是否是4的整数倍的问题。
    (这里a已经是个偶数了,所以a%4只有0和2两种情况)
    所以再分两种情况,当a%4=0时,最少有a4{a\over4}4a​只;当a%4=2时,有一只鸡,剩下全是兔,即最少有a−24{a-2\over4}4a−2​+1只。

代码

#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;int main(int argc, const char * argv[]) {int n,a;int max,min;scanf("%d",&n);while(n--){max=0;min=0;scanf("%d",&a);if(a%2!=0)printf("%d %d\n",min,max);else{max=a/2;if(a%4==2)min=(a-2)/4+1;elsemin=a/4;printf("%d %d\n",min,max);}}return 0;
}

《算法笔记》Codeup练习 5.1小节 简单数学问题相关推荐

  1. 算法笔记CodeUp第一至第六章刷题记录

    文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...

  2. 算法笔记习题 2-9小节

    算法笔记@Ada_Lake 算法笔记代码保留地~~~ 2.9小节--C/C++快速入门->补充 有关cin 和 cout cout 中控制 double型 的精确度 - 1. 加入#includ ...

  3. 算法笔记习题 7-1小节

    算法笔记@Ada_Lake 算法笔记代码保留地~~~ 7.1小节--提高篇->数据结构专题->栈的应用 首先讲了一下栈的定义.即栈就通俗而言即先进先出.每个栈都有一个栈顶指针来指向栈的最上 ...

  4. 问题 C: EXCEL排序 作业比赛编号 : 100000581 - 《算法笔记》4.1小节——算法初步->排序 Codeup

    问题 C: EXCEL排序 作业比赛编号 : 100000581 - <算法笔记>4.1小节--算法初步->排序 Codeup 注意: 1.姓名的字符长度为6,但是定义数组时,应为n ...

  5. javascript进制转换_《算法笔记》3.5小节——入门模拟-gt;进制转换

    @[TOC] # Contest100000579 - <算法笔记>3.5小节--入门模拟->进制转换 ## 例题 ### PATB1022 PTA | 程序设计类实验辅助教学平台 ...

  6. codeup墓地目录(算法笔记习题刷题笔记)

    在线codeup contest 地址:http://codeup.cn/contest.php Contest100000575 - <算法笔记>3.1小节--入门模拟->简单模拟 ...

  7. Contest100000581 - 《算法笔记》4.1小节——算法初步-排序

    文章目录 Contest100000581 - <算法笔记>4.1小节--算法初步->排序 1.讲解 4.1 .1 选择排序 4.1.2 插入排序 4.1.3 排序题与sort()函 ...

  8. codeup《算法笔记》题目索引(题目+答案+思路)

    <算法笔记>2.1小节--C/C++快速入门->基本数据类型 本小节无练习题orz <算法笔记>2.2小节--C/C++快速入门->顺序结构 <算法笔记> ...

  9. 《算法笔记》2.3小节——C/C++快速入门-选择结构

    <算法笔记>2.3小节--C/C++快速入门->选择结构 Contest100000567 - <算法笔记>2.3小节--C/C++快速入门->选择结构 Conte ...

  10. 胡凡 《算法笔记》 上机实战训练指南 3.1 简单模拟

    胡凡 <算法笔记> 上机实战训练指南 3.1 持续更新中 , 菜鸡的刷题笔记- 大学到现在了还没咋好好刷过题,该push自己了- 文章目录 胡凡 <算法笔记> 上机实战训练指南 ...

最新文章

  1. 一个人就需要对象之js中八种创建对象方式
  2. 求链表倒数第k个结点
  3. css33d图片轮播_1.Web前端之CSS3中3D立方体以及3D轮播图
  4. Netscreen防火墙常用命令-管理篇
  5. swoole 协程channel乱测
  6. win11怎么添加小组件 window11添加小组件的设置方法
  7. UVA11063 B2-Sequence【序列】
  8. matlab里面画离散信号怎么画_一、基本离散信号的MATLAB产生和图形实现
  9. 提示不支持IE6的脚本
  10. C++MFC实现win10标准计算器
  11. 室内环境空气质量监测系统
  12. es 创建索引 指定id_elasticsearch创建索引
  13. HTML5 codecademy
  14. 积极为开发者提供开源客服系统,春松客服得到有味生活3D商城认可
  15. BootstrapTable中文文档
  16. 获取微信中的音频方法
  17. vue2 elementui描述列表
  18. session与登录机制
  19. 实记JLink-V8刷固件方法
  20. 微信小程序开发商品展示(2)

热门文章

  1. 领英常见问题—如何提高邀请通过率与账号曝光量
  2. RGB颜色值在线转换工具
  3. Entry name ‘org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt’ collided
  4. rabbitmq 从channal获得socket
  5. 折弯机使用说明书_折弯机使用操作方法-几大要点
  6. 微信小程序消息推送通知模板id生成获取
  7. 关于同步、异步传输的解释
  8. 思维导图网页版推荐,这两个网站建议收藏
  9. 实验吧-简单的登录题——WriteUp再研究
  10. Excel常用技巧(一)