N的倍数
属于函数的内容
题目
-
问题描述
明明的爸爸在研究一个复杂的数学问题,研究了很长时间都没有结果。明明看见后就问爸爸在研究什么。明明的爸爸回答说:"我在研究一个整数的倍数问题,想找到某个数的倍数......"明明还没有等他爸爸说完,就抢着说:"这不是很简单嘛,你把这个整数乘以1,乘以2,......,就能得到很多的倍数呀。"明明的爸爸当然知道这种方法,但是他接着说:"这样的方法找倍数当然容易,但是我找的倍数有一个特点,那个倍数只能由0或1组成,且应该尽量的小。例如一个自然数2,它符合要求的那个倍数就是10。"这下明明明白为什么爸爸研究了那么多时间都还没有研究出结果了,因为随着数字的增大,找到它的符合要求的倍数越来越难。明明想帮他爸爸解决这个问题,于是他来求助于你,能否帮他爸爸写一个程序,来求一个整数的倍数,倍数仅有0或1组成,且要尽可能小。 明明的问题可以归结为:任意给定一个自然数N,寻找一个M,要求M是N的倍数,且它的所有各位数字都是由0或1组成,并要求M尽可能小。 -
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数N(1≤N≤100),代表要求倍数的那个整数。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。 -
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个整数,即N的倍数M。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。 -
输入范例
1
2 -
输出范例
1
10
解题思路
- 解答的思路是首先编写一个判断数中是否只含有0和1,然后在主函数中利用while循环判断数N的倍数是否符合数中只含有0和1,符合那么当前的倍数就是我们要找的M,否则继续循环直到找到为止。
整体代码
cpp
#include<bits/stdc++.h>
using namespace std;
bool onezero(int x){
bool flag=true;
while(x){
if(x%10!=1&&x%10!=0){
flag=false;
break;
}
x/=10;
}
return flag;
}
int main(){
int N;
while(cin>>N){
int i=1,M=N;
while(true){
if(onezero(M)){
break;
}
i++;
M=N*i;
}
cout<<M<<endl;
}
return 0;
}
注意事项
- 注意while里面不要忘记了break。
求n天后的日期
属于函数的内容
题目
-
问题描述
写一个函数,传入年月日,计算它的第二天,并返回该日期。由用户输入年月日和一个n值,使用前述函数,计算该日期加n天的日期为多少。 -
输入说明
输入year,month,day和n共4个正整数,以空格分隔。n的值不超过2000。 -
输出说明
输出计算得到的结果年月日共3个正整数,整数之间以一个空格分隔,行首与行尾无多余空格。 -
输入范例
2000 1 1 366
-
输出范例
2001 1 1
解题思路
- 本题思路是编写一些功能函数,例如闰年判断函数,含有闰年判断函数的获取月份天数函数,再根据获取月份天数函数写出得到后一天的日期的函数,思想是比较day和获取到的当前月份的天数比较,如果小于月份天数,就直接day++,否则直接令day=1开启新的一月,此时又需要判断当前月份是不是12月,不是的话直接month++,否则month=1,year++,开启新的一年第一天。
整体代码
cpp
#include<bits/stdc++.h>
using namespace std;
bool isleapyear(int year){
return ((year%400==0)||(year%4==0&&year%100!=0));
}
int getdaysinmonth(int year, int month){
switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 4: case 6: case 9: case 11:
return 30;
case 2:
return isleapyear(year) ? 29 : 28;
default:
return 0;
}
}
void getnextday(int &year,int &month,int &day){
int dayinmonth=getdaysinmonth(year,month);
if(day<dayinmonth){
day++;
}else{
day=1;
if(month<12){
month++;
}else{
year++;
month=1;
}
}
}
int main(){
int year,month,day,n;
cin>>year>>month>>day>>n;
for(int i=0;i<n;i++){
getnextday(year,month,day);
}
cout<<year<<" "<<month<<" "<<day<<endl;
return 0;
}
注意事项
- 注意题目要求的函数的作用。
菱形输出
属于函数的内容
题目
-
问题描述
明明这次又碰到问题了:
给定一个正整数N,明明的爸爸让他输出一个以Z开始的菱形,以后依次为Y,X...,
比如当N等于1的时候输出图形:
Z
当N等于2的时候,输出图形:(Y前没有空格,Z、X和W前一个空格)
Z
Y X
W
当N等于3的时候,输出图形(Z前两个空格,Y、X前一个空格,W前没有空格...):
Z
Y X
W V
U T
S
明明发现当N很大的时候就不是很容易了,所以找到了你,希望你编写一个程序帮助他
明明的问题可以归结为:输入一个正整数N,输出一个以Z开始的菱形,以后依次为Y,X...。
请尝试定义函数,该函数的功能是输出以上图形的一行。 -
输入说明
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1≤n≤7)。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。 -
输出说明
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组输出一个以Z开始的菱形,具体格式参照样例输出。每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果之后没有空行。 注:通常,显示屏为标准输出设备。 -
输入范例
1
3 -
输出范例
Z
ZY X
W V
U T
S
解题思路
整体代码
cpp
#include <iostream>
using namespace std;
// 获取前一个字母
char prevChar(char c) {
if (c == 'A') return 'Z';
return c - 1;
}
// 输出菱形的第 i 行(i 从 1 开始到 2n)
void printLine(int n, int i, char &ch) {
// 计算前导空格数
int leadingSpaces;
if (i <= n) {
leadingSpaces = n - i;
} else {
leadingSpaces = i - n - 1; // 注意这里减1
}
// 输出前导空格
for (int s = 0; s < leadingSpaces; s++) cout << ' ';
// 输出第一个字符
cout << ch;
char currentCh = ch; // 保存当前字符
ch = prevChar(ch);
// 计算中间空格数
int midSpaces;
if (i <= n) {
midSpaces = 2 * i - 3;
} else {
int j = 2 * n - i; // 这里用 2n-i,不是 2n-i+1
midSpaces = 2 * j - 1; // 这里用 2j-1
}
// 输出第二个字符(如果有)
if (midSpaces > 0) { // 注意是 >0,不是 >=0
for (int s = 0; s < midSpaces; s++) cout << ' ';
cout << ch;
ch = prevChar(ch);
} else if (midSpaces == 0) {
// 中间空格为0,两个字符紧挨着
cout << ch;
ch = prevChar(ch);
}
// 如果 midSpaces < 0,不输出第二个字符
cout << endl;
}
int main() {
int n;
bool firstCase = true;
while (cin >> n) {
if (!firstCase) {
cout << endl; // 两组之间空行
}
firstCase = false;
char ch = 'Z';
// 输出菱形
for (int i = 1; i <= 2 * n; i++) {
printLine(n, i, ch);
}
}
return 0;
}
注意事项
- 注意"=="和"="之分,不要忘记。
英文段落翻译
自己翻译
协同技术发挥了一个支持性的作用。例如,生物识别技术能被广泛的应用在人类,机器和对象中的定制化交互中。人工智能,计算机视觉,机器人学和远程呈现可以在未来让我们的生活更加的自动化。
作为一个新兴技术,物联网将会变得更加成熟和更加的复杂。图12C-1展示了最主要的从物联网中获益的科技设备和关键应用。例如,供应链现在比之前要更加的可行。垂直商店应用可能代表了下一个先进的浪潮。当我们移向2020的时候,全局定位有望成为一个事实。另外,一个真实的物联网可能在全球范围内产生。这些先进技术将会更大的提升人类的能力,社会的输出,国家的生产和生活的质量。
3.物联网的结构
物联网系统,更像是有一个事件驱动的架构。在图12C-2,物联网的开发是用一个三层的架构展示的。顶层受驱动的应用程序构成,物联网的应用空间是巨大的。底层代表了多种类型的感知设备:即射频识别标签,Zigbee或者其他类型的传感器,和道路地图GPS导航。传感设备在射频识别网络,传感器网络和GPS的形成中是本地的或者宽领域连接的。信号或者信息采集在这些传感设备中是通过云计算平台在中间层和应用连接的。
AI翻译
协同技术则扮演着辅助角色。例如,生物识别技术可被广泛应用于个性化人、机、物之间的交互。人工智能、计算机视觉、机器人学与远程呈现技术,将使我们的生活未来更加自动化。
作为一项新兴技术,物联网将变得更加成熟与精密。图12C-1展示了可能受益于物联网的主要技术进步与关键应用领域。例如,供应链如今获得了比以往更好的支持。垂直市场应用可能代表下一波发展浪潮。随着我们迈向2020年,泛在定位有望成为现实。在此之后,一个物理层面的物联网或将在全球范围内建立。这些进展将显著提升人类能力、社会成果、国家生产力与生活质量。
三、物联网的体系架构
物联网系统很可能采用事件驱动的架构。在图12C-2中,物联网的开发以一个三层架构呈现。顶层由驱动型应用构成。物联网的应用空间极为广阔。底层则代表各类传感设备:即RFID标签、ZigBee或其他类型的传感器,以及路线规划GPS导航器。这些传感设备以RFID网络、传感器网络和GPS系统的形式,进行本地或广域连接。由这些传感设备采集的信号或信息,通过中间层的云计算平台,与上层的应用程序相连接。
单词打卡

下一篇
待续