当前位置: 首页 > news >正文

ZZNUOJ(C/C++)基础练习1061——1070(详解版)

目录

1061 : 顺序输出各位数字

C语言版

C++版

1062 : 最大公约数

 C++

1063 : 最大公约与最小公倍

 C

 C++

 1064 : 加密字符

 C

C++

1065 : 统计数字字符的个数

 C

C++

1066 : 字符分类统计

C

C++ 

1067 : 有问题的里程表

C

C++ 

1068 : 进制转换

 C

C++

C++(容器stack)

 1069 : 向Z同学学习

C

C++

1070 : 小汽车的位置

 C

C++

代码逻辑解释

收藏加关注,观看不迷路


1061 : 顺序输出各位数字

题目描述

 输入一个整数,从高位开始逐位分割并输出各位数字。 

输入

 输入一个正整数n,n是int型数据 

输出

 依次输出各位上的数字,每一个数字后面有一个空格,输出占一行。例如,输入 12345 ,输出 1 2 3 4 5 

样例输入

12345

样例输出

1 2 3 4 5

C语言版

#include<stdio.h>  // 包含标准输入输出库int main()
{int n, arr[100], i = 0, j;  // 定义变量// n: 输入的整数// arr: 用于存储分离出来的每一位数字,数组大小为100// i: 用于记录分离出的数字个数,初始化为0// j: 用于循环遍历数组scanf("%d", &n);  // 从标准输入读取一个整数 n// 使用 while 循环分离每一位数字,逆序存储while (n != 0){arr[i++] = n % 10;  // 取出 n 的最后一位数字,存储到数组 arr 中,并将 i 加 1n /= 10;            // 去掉 n 的最后一位数字}// 使用 for 循环按从高位到低位的顺序输出每一位数字for (j = i - 1; j >= 0; j--){printf("%d ", arr[j]);  // 逆序输出数组 arr 中的每一位数字}return 0;  // 程序正常结束
}

C++版

#include<bits/stdc++.h>
using namespace std;int main()
{string line;  // 定义一个字符串变量 line,用于存储输入的整行getline(cin, line);  // 使用 std::getline 读取整行输入// 使用 range-based for 循环遍历字符串,并输出每个字符for (char ch : line){cout << ch << " ";  // 输出每个字符,字符之间用空格分隔}return 0;  // 程序正常结束
}

码二

#include <bits/stdc++.h>
using namespace std;int main() {char ch;int i = 0;vector<char> str(21); // 定义一个大小为21的vector,足够存储20个字符和一个换行符while (scanf("%c", &ch) == 1 && ch != '\n') { // 检查scanf的返回值,并确保ch不等于换行符if (i < 20) { // 限制输入字符数量不超过20str[i++] = ch;}}str[i] = '\0'; // 在字符串末尾添加空字符,确保字符串正确终止// 输出vector中的字符for (int j = 0; j < i; ++j) { // 只输出实际存储的字符printf("%c ", str[j]);}printf("\n"); // 输出换行符,确保输出格式正确return 0;
}

1062 : 最大公约数

题目描述

输入两个正整数,输出其最大公约数。

输入

输入两个正整数m和n,数据之间用空格隔开。

输出

输出一个整数,表示m和n的最大公约数。

样例输入

4 6

样例输出

2

坑点:C++使用cin 和cout输入输出时,OJ 过不了,换成scanf和printf就过了

#include<stdio.h>
int main()
{int m, n, r; // 定义三个整数变量,用于存储输入的两个数和余数scanf("%d%d", &m, &n); // 从标准输入读取两个整数,分别存储到变量 m 和 n 中// 如果 m 大于 n,交换它们的值,确保 m <= nif(m > n){int mid = m; // 使用中间变量 mid 来暂存 m 的值m = n;       // 将 n 的值赋给 mn = mid;     // 将 mid(原 m 的值)赋给 n}// 使用欧几里得算法计算最大公约数while(r = n % m, r != 0) // 在每次循环中,计算 n 除以 m 的余数 r,并检查 r 是否为 0{n = m; // 如果 r 不为 0,将 m 的值赋给 nm = r; // 将余数 r 赋给 m}printf("%d\n", m); // 最终,m 的值即为最大公约数,输出结果return 0; // 程序正常结束,返回 0
}

 C++

#include <iostream>
#include <algorithm> // 包含算法库,用于使用 swap 函数
using namespace std;int main() {ios::sync_with_stdio(false); // 关闭 C++ 和 C 标准输入输出之间的同步,提高输入输出效率cin.tie(nullptr);            // 解绑 cin 和 cout,进一步提高效率int m, n, r; // 定义三个整数变量,用于存储输入的两个数和余数scanf("%d%d", &m, &n);       // 使用 scanf 从标准输入读取两个整数,分别存储到变量 m 和 n 中// 如果 m 大于 n,交换它们的值,确保 m <= nif (m > n) swap(m, n);       // 使用标准库中的 swap 函数交换 m 和 n 的值// 使用欧几里得算法计算最大公约数while (r = n % m, r != 0) {  // 在每次循环中,计算 n 除以 m 的余数 r,并检查 r 是否为 0n = m;                   // 如果 r 不为 0,将 m 的值赋给 nm = r;                   // 将余数 r 赋给 m}printf("%d\n", m);           // 最终,m 的值即为最大公约数,使用 printf 输出结果return 0;                    // 程序正常结束,返回 0
}

1063 : 最大公约与最小公倍

题目描述

输入两个正整数,输出其最大公约数和最小公倍数。

输入

输入两个正整数n和m(n,m<=1000000)。输入保证最终结果在int范围内。

输出

输出两个整数,用空格隔开。表示m和n的最大公约数和最小公倍数。

样例输入

4 6

样例输出

2 12

注意:要用 long long定义变量,防止溢出

 C

#include<stdio.h>int main() {long long mid1, m, n, r; // 定义变量,m 和 n 用于存储输入的两个整数,r 用于存储余数,mid1 用于存储两数的乘积// 从标准输入读取两个整数 m 和 nscanf("%lld%lld", &m, &n);// 计算两个数的乘积,用于后续计算最小公倍数mid1 = m * n;// 如果 m 大于 n,交换它们的值,确保 m <= nif (m > n) {int mid = m; // 使用中间变量 mid 来暂存 m 的值m = n;       // 将 n 的值赋给 mn = mid;     // 将 mid(原 m 的值)赋给 n}// 使用欧几里得算法计算最大公约数while (r = n % m, r != 0) { // 在每次循环中,计算 n 除以 m 的余数 r,并检查 r 是否为 0n = m;                  // 如果 r 不为 0,将 m 的值赋给 nm = r;                  // 将余数 r 赋给 m}// 输出最大公约数和最小公倍数// 最小公倍数 = 两数乘积 / 最大公约数printf("%lld %lld\n", m, mid1 / m);return 0; // 程序正常结束,返回 0
}

 C++

#include<iostream> // 包含输入输出流库
#include<algorithm> // 包含算法库,用于使用 swap 函数
using namespace std; // 使用标准命名空间int main() {ios::sync_with_stdio(false); // 关闭 C++ 和 C 标准输入输出之间的同步,提高输入输出效率cin.tie(nullptr);            // 解绑 cin 和 cout,进一步提高效率long long mid1, m, n, r; // 定义变量,m 和 n 用于存储输入的两个整数,r 用于存储余数,mid1 用于存储两数的乘积// 使用 scanf 从标准输入读取两个整数,分别存储到变量 m 和 n 中scanf("%lld%lld", &m, &n);// 计算两个数的乘积,用于后续计算最小公倍数mid1 = m * n;// 如果 m 大于 n,交换它们的值,确保 m <= nif (m > n) swap(m, n); // 使用标准库中的 swap 函数交换 m 和 n 的值// 使用欧几里得算法计算最大公约数while (r = n % m, r != 0) { // 在每次循环中,计算 n 除以 m 的余数 r,并检查 r 是否为 0n = m;                  // 如果 r 不为 0,将 m 的值赋给 nm = r;                  // 将余数 r 赋给 m}// 输出最大公约数和最小公倍数// 最小公倍数 = 两数乘积 / 最大公约数printf("%lld %lld\n", m, mid1 / m);return 0; // 程序正常结束,返回 0
}

 1064 : 加密字符

题目描述

从键盘输入一批字符,以@结束,按要求加密并输出。

输入

从键盘输入一批字符,占一行,以@结束。

输出

输出占一行
加密规则:
1)、所有字母均转换为小写。
2)、若是字母'a'到'y',则转化为下一个字母,若是'z',则转化为'a'。
3)、其它字符,保持不变。

样例输入

Kyh520@

样例输出

lzi520

 C

#include<stdio.h>int main()
{char ch, str[100000]; // 定义字符变量 ch 用于读取输入字符,str 用于存储处理后的结果,长度为 100000int i = 0;            // 定义索引变量 i,用于记录当前存储位置// 循环读取字符,直到遇到 '@' 为止while(scanf("%c", &ch), ch != '@'){// 如果是小写字母if(ch >= 'a' && ch <= 'z'){// 如果是 'z',转换为 'a'if(ch == 'z'){str[i++] = 'a';}else{// 否则,转换为下一个字母str[i++] = ch + 1;}       }   // 如果是大写字母else if(ch >= 'A' && ch <= 'Z'){// 如果是 'Z',转换为 'a'if(ch == 'Z'){str[i++] = 'a';}else{// 否则,转换为对应的小写字母的下一个字母str[i++] = ch + 33;}}// 如果是其他字符,直接存储else{str[i++] = ch;}}// 在字符串末尾添加空字符,确保字符串正确终止str[i] = '\0';// 输出处理后的字符串printf("%s\n", str);return 0; // 程序正常结束
}

C++

#include<iostream>
#include<algorithm>
using namespace std;int main()
{ios::sync_with_stdio(false); // 关闭 C++ 和 C 标准输入输出之间的同步,提高输入输出效率char ch, str[100000]; // 定义字符变量 ch 用于读取输入字符,str 用于存储处理后的结果,假设输入长度不超过 100000int i = 0;            // 定义索引变量 i,用于记录当前存储位置// 循环读取字符,直到遇到 '@' 为止while(scanf("%c", &ch), ch != '@'){// 如果是小写字母if(ch >= 'a' && ch <= 'z'){// 如果是 'z',转换为 'a'if(ch == 'z'){str[i++] = 'a';}else{// 否则,转换为下一个字母str[i++] = ch + 1;}       }   // 如果是大写字母else if(ch >= 'A' && ch <= 'Z'){// 如果是 'Z',转换为 'a'if(ch == 'Z'){str[i++] = 'a';}else{// 否则,转换为对应的小写字母的下一个字母str[i++] = ch + 33; // 大写字母转换为小写字母后加1}}// 如果是其他字符,直接存储else{str[i++] = ch;}}// 在字符串末尾添加空字符,确保字符串正确终止str[i] = '\0';// 输出处理后的字符串printf("%s\n", str);return 0; // 程序正常结束
}

1065 : 统计数字字符的个数

题目描述

输入一行字符,以回车符作为输入结束的标志。统计其中数字字符的个数。

输入

多个字符,以回车符结束,回车符不作为有效字符。

输出

输出一个整数,表示数字字符的个数。

样例输入

12abrt12@2013

样例输出

8

 C

#include<stdio.h> // 包含标准输入输出库int main()
{char ch; // 定义字符变量 ch,用于逐个读取输入的字符int num = 0; // 定义变量 num,用于统计数字字符的数量,初始值为 0// 循环读取字符,直到遇到换行符 '\n' 为止while(scanf("%c", &ch), ch != '\n'){// 如果字符是数字字符('0' 到 '9')if(ch >= '0' && ch <= '9'){num++; // 数字字符计数加 1}}// 输出统计到的数字字符的数量printf("%d\n", num);return 0; // 程序正常结束,返回 0
}

C++

#include<stdio.h> // 包含标准输入输出库int main()
{char ch; // 定义字符变量 ch,用于逐个读取输入的字符int num = 0; // 定义变量 num,用于统计数字字符的数量,初始值为 0// 循环读取字符,直到遇到换行符 '\n' 为止while(scanf("%c", &ch), ch != '\n'){// 如果字符是数字字符('0' 到 '9')if(ch >= '0' && ch <= '9'){num++; // 数字字符计数加 1}}// 输出统计到的数字字符的数量printf("%d\n", num);return 0; // 程序正常结束,返回 0
}

1066 : 字符分类统计

题目描述

输入一行字符,以回车符作为输入结束的标志。统计其中英文字母、数字字符和其他字符的个数。

输入

多个字符,以回车符结束,回车符不作为有效字符。有效字符个数不超过100。

输出

输出分3行,格式见输出样例。

样例输入

Abse 4+5*3=?

样例输出

letter:4
digit:3
other:5

C

#include<stdio.h> // 包含标准输入输出库int main()
{char ch; // 定义字符变量 ch,用于逐个读取输入的字符int letter = 0, digit = 0, other = 0; // 定义三个变量,分别用于统计字母、数字和其他字符的数量// 循环读取字符,直到遇到换行符 '\n' 为止while(scanf("%c", &ch), ch != '\n'){// 如果字符是数字字符('0' 到 '9')if(ch >= '0' && ch <= '9'){digit++; // 数字字符计数加 1}// 如果字符是字母(小写或大写)else if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z'){letter++; // 字母字符计数加 1}// 如果字符既不是数字也不是字母else{other++; // 其他字符计数加 1}}// 输出统计结果printf("letter:%d\ndigit:%d\nother:%d\n", letter, digit, other);return 0; // 程序正常结束,返回 0
}

C++ 

#include<iostream> // 包含 C++ 标准输入输出流库
using namespace std; // 使用标准命名空间int main()
{ios::sync_with_stdio(false); // 关闭 C++ 和 C 标准输入输出之间的同步,提高输入输出效率char ch; // 定义字符变量 ch,用于逐个读取输入的字符int letter = 0, digit = 0, other = 0; // 定义三个变量,分别用于统计字母、数字和其他字符的数量// 循环读取字符,直到遇到换行符 '\n' 为止while(scanf("%c", &ch), ch != '\n'){// 如果字符是数字字符('0' 到 '9')if(ch >= '0' && ch <= '9'){digit++; // 数字字符计数加 1}// 如果字符是字母(小写或大写)else if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z'){letter++; // 字母字符计数加 1}// 如果字符既不是数字也不是字母else{other++; // 其他字符计数加 1}}// 输出统计结果printf("letter:%d\ndigit:%d\nother:%d\n", letter, digit, other);return 0; // 程序正常结束,返回 0
}

1067 : 有问题的里程表

题目描述

某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示339,汽车走过1公里之后,该里程表显示350。

输入

输入一个整数num,表示里程表显示的数值,1 < num < 1000,且一定不含整数4。

输出

输出一个整数,为该汽车实际行驶的公里数。例如,如果该里程表显示55,则实际走过的公里 数是40。

样例输入

106

样例输出

86

此题本质:进制转换(10 进制转为9进制)

C

#include<stdio.h> // 包含标准输入输出库int main()
{int num, mid = 1, res = 0; // 定义变量// num 用于存储输入的数字// mid 用于表示当前位的权重,初始化为 1// res 用于存储转换后的结果,初始化为 0scanf("%d", &num); // 从标准输入读取一个整数,存储到变量 num 中// 循环处理 num 的每一位,直到 num 为 0while(num != 0){// 处理当前位的数字(从最低位开始)if(num % 10 < 4) // 如果当前位的数字小于 4{res += (num % 10) * mid; // 直接将当前位的数字乘以权重 mid,加到结果 res 中}else // 如果当前位的数字大于等于 4{res += (num % 10 - 1) * mid; // 将当前位的数字减 1 后乘以权重 mid,加到结果 res 中}num /= 10; // 去掉 num 的最低位,处理下一位mid *= 9; // 更新权重 mid,每次乘以 9}printf("%d\n", res); // 输出转换后的结果return 0; // 程序正常结束,返回 0
}

C++ 

#include<iostream> // 包含 C++ 标准输入输出流库
using namespace std; // 使用标准命名空间int main()
{ios::sync_with_stdio(false); // 关闭 C++ 和 C 标准输入输出之间的同步,提高输入输出效率int num, mid = 1, res = 0; // 定义变量// num 用于存储输入的数字// mid 用于表示当前位的权重,初始化为 1// res 用于存储转换后的结果,初始化为 0scanf("%d", &num); // 从标准输入读取一个整数,存储到变量 num 中// 循环处理 num 的每一位,直到 num 为 0while(num != 0){// 处理当前位的数字(从最低位开始)if(num % 10 < 4) // 如果当前位的数字小于 4{res += (num % 10) * mid; // 直接将当前位的数字乘以权重 mid,加到结果 res 中}else // 如果当前位的数字大于等于 4{res += (num % 10 - 1) * mid; // 将当前位的数字减 1 后乘以权重 mid,加到结果 res 中}num /= 10; // 去掉 num 的最低位,处理下一位mid *= 9; // 更新权重 mid,每次乘以 9}printf("%d\n", res); // 输出转换后的结果return 0; // 程序正常结束,返回 0
}

1068 : 进制转换

题目描述

将一个二进制数,转换为对应的十进制数。

输入

输入一个二进制数,以回车结束。该二进制数为正数,长度不超过31。

输出

输出一个整数,为该二进制数对应的十进制数。

样例输入

100000000001

样例输出

2049

 C

#include<stdio.h> // 包含标准输入输出库
#include<string.h> // 包含字符串处理库,用于使用 strlen 函数int main()
{char arr1[100]; // 定义字符数组 arr1,用于存储输入的二进制数gets(arr1); // 从标准输入读取一行字符串,存储到 arr1 中int sz = strlen(arr1); // 计算输入字符串的长度int res = 0; // 定义变量 res,用于存储转换后的十进制数int mid = 1; // 定义变量 mid,用于表示当前位的权重(2 的幂次),初始化为 1// 从字符串的末尾开始,逐位处理二进制数for(int i = sz - 1; i >= 0; i--){res += (arr1[i] - '0') * mid; // 将当前位的数字(0 或 1)乘以权重 mid,加到结果 res 中mid *= 2; // 更新权重 mid,每次乘以 2}printf("%d\n", res); // 输出转换后的十进制数return 0; // 程序正常结束,返回 0
}

C++

#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间int main()
{ios::sync_with_stdio(false); // 关闭C++和C标准输入输出之间的同步,提高输入输出效率string arr1; // 定义一个字符串变量arr1,用于存储输入的二进制数getline(cin, arr1); // 使用getline从标准输入读取一行字符串,存储到arr1中int sz = arr1.length(); // 计算输入字符串的长度int res = 0; // 定义变量res,用于存储转换后的十进制数int mid = 1; // 定义变量mid,用于表示当前位的权重(2的幂次),初始化为1// 从字符串的末尾开始,逐位处理二进制数for(int i = sz - 1; i >= 0; i--){res += (arr1[i] - '0') * mid; // 将当前位的数字('0'或'1')转换为整数,并乘以权重mid,加到结果res中mid *= 2; // 更新权重mid,每次乘以2}printf("%d\n", res); // 输出转换后的十进制数return 0; // 程序正常结束,返回0
}

C++(容器stack)

#include<iostream> // 包含C++标准输入输出流库
#include<stack> // 包含栈库,用于使用stack容器
using namespace std; // 使用标准命名空间int main()
{ios::sync_with_stdio(false); // 关闭C++和C标准输入输出之间的同步,提高输入输出效率stack<char> str; // 定义一个字符栈str,用于存储输入的二进制数char ch; // 定义字符变量ch,用于逐个读取输入的字符int res = 0; // 定义变量res,用于存储转换后的十进制数int mid = 1; // 定义变量mid,用于表示当前位的权重(2的幂次),初始化为1// 循环读取字符,直到遇到换行符'\n'为止while(scanf("%c", &ch), ch != '\n'){str.push(ch); // 将读取的字符推入栈中}// 逐个弹出栈中的字符,进行转换while(!str.empty()){res += (str.top() - '0') * mid; // 将栈顶字符转换为整数,并乘以权重mid,加到结果res中str.pop(); // 弹出栈顶字符mid *= 2; // 更新权重mid,每次乘以2}printf("%d\n", res); // 输出转换后的十进制数return 0; // 程序正常结束,返回0
}

 1069 : 向Z同学学习

题目描述

Z同学为了实现暑假去云南旅游的梦想,决定以后每天只消费1元,每花k元就可以再得到1元,一开始Z同学有M元,问最多可以坚持多少天。

输入

输入2个整数M, k,(2 <= k <= M <= 1000)。

输出

输出一个整数,表示M元可以消费的天数。

样例输入

4 3

样例输出

5

C

#include<stdio.h> // 包含标准输入输出库int main()
{int M, k, day = 0; // 定义变量// M:Z同学初始拥有的钱数// k:每消费k元可以额外获得1元的条件// day:记录Z同学可以坚持的总天数,初始化为0scanf("%d%d", &M, &k);// 循环处理,直到Z同学的钱数M为0while(M != 0){// 如果Z同学的钱数M大于等于kif(M >= k){day += k; M = M - k + 1; // Z同学消费了k元后,额外获得1元,剩余的钱数为M-k+1}else{day += M; // Z同学的钱数M小于k,只能坚持M天M = 0; // Z同学的钱数M为0,结束循环}}printf("%d\n", day); // 输出Z同学可以坚持的总天数return 0; // 程序正常结束,返回0
}

C++

#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间int main()
{ios::sync_with_stdio(false); // 关闭C++和C标准输入输出之间的同步,提高输入输出效率int M, k, day = 0; // 定义变量M(Z同学初始拥有的钱数)、k(每消费k元可以额外获得1元的条件)和day(Z同学可以坚持的总天数)scanf("%d%d", &M, &k); // 循环处理,直到Z同学的钱数M为0while(M != 0){// 如果Z同学的钱数M大于等于kif(M >= k){day += k;M = M - k + 1; // Z同学消费了k元后,额外获得1元,剩余的钱数为M-k+1}else{day += M;M = 0; // Z同学的钱数M为0,结束循环}}printf("%d\n", day); // 输出Z同学可以坚持的总天数return 0; // 程序正常结束,返回0
}

1070 : 小汽车的位置

题目描述

有一辆智能小车,最初(时间为0)的位置为(0,0),我们想知道它最后的位置。小车以每小时10公里的速度向北移动(以北为y轴正向,以东为x轴正向)。小车会受到一系列依照时间戳记排序的命令,1表示“向左转”,2表示“向右转”,3表“停止”。每个命令的前面有一个时间戳记,所以我们知道该命令是何时发出的。最后一个命令一定是“停止”。我们另外假设,这辆小车非常灵活,它可以在瞬间转弯。
以下列输入为例。小车在时间为5的时候收到一个“向左转”的命令1,在时间10收到一个“向右转”的命令2,在时间15收到一个“停止”的命令3。那么在最后时间15的时候,小车的位置将在(-50,100)。程序只要求输出小车最后的位置,第一个整数是x坐标,第二个整数是y坐标。

输入

输入包含多个命令,每个命令由整数time和command组成,表示在时刻time发出命令command。command的取值范围1~3,含义如上所述。

输出

输出占一行,包含两个整数,表示小车的最终位置。两个整数之间由空格隔开。

样例输入

5 1
10 2
15 3

样例输出

-50 100

注意:由题可知小车初始方向为北

 C

#include<stdio.h> // 包含标准输入输出库int main()
{int time, time0 = 0, time1, command, x = 0, y = 0; // 定义变量// time:当前时间段的长度// time0:上一个命令的时间戳// time1:当前命令的时间戳// command:当前命令// x:小车的x坐标// y:小车的y坐标int flag = 1; // 定义方向标志,1表示向北,2表示向东,3表示向南,4表示向西// 无限循环,直到接收到停止命令while(1){scanf("%d%d", &time1, &command); // 读取当前命令的时间戳和命令类型time = time1 - time0; // 计算上一个命令的有效时间长度time0 = time1; // 更新上一个命令的时间戳,为下次循环做准备// 根据当前方向标志更新小车的位置if(flag == 1) // 向北移动{y += 10 * time; // y坐标增加}   else if(flag == 2) // 向东移动{x += 10 * time; // x坐标增加}else if(flag == 3) // 向南移动{y -= 10 * time; // y坐标减少}else // 向西移动{x -= 10 * time; // x坐标减少}// 处理命令if(command == 3) // 停止命令{break; // 退出循环}else if(command == 1) // 向左转{flag--; // 方向标志减1}else // 向右转{flag++; // 方向标志加1}// 处理方向标志越界if(flag == 0) flag = 4; // 如果方向标志为0,调整为4(向西)if(flag == 5) flag = 1; // 如果方向标志为5,调整为1(向北)}printf("%d %d", x, y); // 输出小车的最终位置return 0; // 程序正常结束,返回0
}

C++

#include<iostream> // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间int main()
{ios::sync_with_stdio(false); // 关闭C++和C标准输入输出之间的同步,提高输入输出效率int time, time0 = 0, time1, command, x = 0, y = 0; // 定义变量// time:当前时间段的长度// time0:上一个命令的时间戳// time1:当前命令的时间戳// command:当前命令// x:小车的x坐标// y:小车的y坐标int flag = 1; // 定义方向标志,1表示向北,2表示向东,3表示向南,4表示向西// 无限循环,直到接收到停止命令while(1){scanf("%d%d", &time1, &command); // 读取当前命令的时间戳和命令类型time = time1 - time0; // 计算当前时间段的长度time0 = time1; // 更新上一个命令的时间戳// 根据当前方向标志更新小车的位置if(flag == 1) // 向北移动{y += 10 * time; // y坐标增加}   else if(flag == 2) // 向东移动{x += 10 * time; // x坐标增加}else if(flag == 3) // 向南移动{y -= 10 * time; // y坐标减少}else // 向西移动{x -= 10 * time; // x坐标减少}// 处理命令if(command == 3) // 停止命令{break; // 退出循环}else if(command == 1) // 向左转{flag--; // 方向标志减1}else // 向右转{flag++; // 方向标志加1}// 处理方向标志越界if(flag == 0) flag = 4; // 如果方向标志为0,调整为4(向西)if(flag == 5) flag = 1; // 如果方向标志为5,调整为1(向北)}printf("%d %d", x, y); // 输出小车的最终位置return 0; // 程序正常结束,返回0
}

代码逻辑解释

  1. 变量定义

    • time:当前时间段的长度。

    • time0:上一个命令的时间戳,初始化为0。

    • time1:当前命令的时间戳。

    • command:当前命令。

    • xy:小车的x和y坐标,初始位置为(0,0)。

    • flag:方向标志,1表示向北,2表示向东,3表示向南,4表示向西。

  2. 输入命令

    • 使用scanf读取每个命令的时间戳time1和命令类型command

  3. 计算时间段

    • time = time1 - time0:计算上个命令的有效时间长度。

    • 更新time0为当前时间戳time1

  4. 更新位置

    • 根据当前方向标志flag,更新小车的x和y坐标。

    • 速度为每小时10公里,因此每单位时间移动10单位距离。

  5. 处理命令

    • 如果命令为3(停止),退出循环。

    • 如果命令为1(向左转),方向标志flag减1。

    • 如果命令为2(向右转),方向标志flag加1。

  6. 处理方向标志越界

    • 如果flag为0,0是由1减1得到的,1为北向,减一为左转,北向左转为西向,所以调整为4(向西)。

    • 如果flag为5,0是由4加1得到的,4为西向,加一为右转,西向右转为北向,所以调整为1(向北)。

收藏加关注,观看不迷路

相关文章:

ZZNUOJ(C/C++)基础练习1061——1070(详解版)

目录 1061 : 顺序输出各位数字 C语言版 C版 1062 : 最大公约数 C C 1063 : 最大公约与最小公倍 C C 1064 : 加密字符 C C 1065 : 统计数字字符的个数 C C 1066 : 字符分类统计 C C 1067 : 有问题的里程表 C C 1068 : 进制转换 C C C&#xff08;容器stack…...

ES6 变量解构赋值总结

1. 数组的解构赋值 1.1 基本用法 // 基本数组解构 const [a, b, c] [1, 2, 3]; console.log(a); // 1 console.log(b); // 2 console.log(c); // 3// 跳过某些值 const [x, , y] [1, 2, 3]; console.log(x); // 1 console.log(y); // 3// 解构剩余元素 const [first, ...re…...

机理模型与数据模型融合的方式

机理模型与数据模型的融合旨在结合两者的优势&#xff0c;以提供更准确、可靠的预测和决策支持。以下是几种常见的融合方式及其示例&#xff1a; 1. 特征增强&#xff08;Feature Augmentation&#xff09; 描述&#xff1a;将由机理模型计算得到的结果作为额外特征加入到数据…...

高效 MyBatis SQL 写法一

高效 MyBatis SQL 写法一 前言 MyBatis 作为一款优秀的持久层框架&#xff0c;极大地简化了数据库操作。 然而&#xff0c;在实际开发中&#xff0c;XML 配置的编写仍然可能显得繁琐。 本文将分享一些 MyBatis 动态 SQL 的优质写法&#xff0c;帮助开发者提升效率并减少错误…...

vue3中的ref相关的api及用法

在 Vue 3 中&#xff0c;ref 相关的 API 主要用于管理响应式数据。以下是 ref 相关的 API 及其用法&#xff1a; 1. ref ref 用于创建响应式的基本数据类型或对象。 用法示例&#xff1a; <script setup> import { ref } from vue;const count ref(0);const incremen…...

3 卷积神经网络CNN

1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron&#xff0c;可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…...

CSV数据分析智能工具(基于OpenAI API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手&#xff0c;你的回应内容取决于用户的请求内容。1. 对于文…...

解决php8.3无法加载curl扩展

把它的值更改为扩展存在的目录的绝对路径(扩展存在的目录为有php_xxx.dll存在的目录) extension_dir "e:\serv\php83\ext" 然后从php根目录复制 libssh2.dll 和 libcrypto-*.dll 和 libssl-*.dll 到Apache根目录下的bin目录 重启apache服务即可...

拍照对比,X70 PRO与X90 PRO+的细节差异

以下是局部截图&#xff08;上X70P下X90PP&#xff09; 对比1 这里看不出差异。 对比2 X90PP的字明显更清楚。 对比3 中下的字&#xff0c;X90PP显然更清楚。...

《MPRnet》学习笔记

paper&#xff1a;2102.02808 GitHub&#xff1a;swz30/MPRNet: [CVPR 2021] Multi-Stage Progressive Image Restoration. SOTA results for Image deblurring, deraining, and denoising. 目录 摘要 1、介绍 2、相关工作 2.1 单阶段方法 2.2 多阶段方法 2.3 注意力机…...

机器学习-线性回归(参数估计之结构风险最小化)

前面我们已经了解过关于机器学习中的结构风险最小化准则&#xff0c;包括L1 正则化&#xff08;Lasso&#xff09;、L2 正则化&#xff08;Ridge&#xff09;、Elastic Net&#xff0c;现在我们结合线性回归的场景&#xff0c;来了解一下线性回归的结构风险最小化&#xff0c;通…...

C++11详解(二) -- 引用折叠和完美转发

文章目录 2. 右值引用和移动语义2.6 类型分类&#xff08;实践中没什么用&#xff09;2.7 引用折叠2.8 完美转发2.9 引用折叠和完美转发的实例 2. 右值引用和移动语义 2.6 类型分类&#xff08;实践中没什么用&#xff09; C11以后&#xff0c;进一步对类型进行了划分&#x…...

深度学习系列--01.入门

一.深度学习概念 深度学习&#xff08;Deep Learning&#xff09;是机器学习的分支&#xff0c;是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次&#xff0c;最终目标是让机器能够像人一样具有分析学习能力&#xff0c;能够识别文字…...

熵采样在分类任务中的应用

熵采样在分类任务中的应用 在机器学习的分类任务里,数据的标注成本常常制约着模型性能的提升。主动学习中的熵采样策略,为解决这一难题提供了新的思路。本文将带你深入了解熵采样在分类任务中的原理、应用及优势。 一、熵采样的原理(优化版) 熵,源于信息论,是对不确定…...

vite配置之---依赖优化选项

vite optimizeDeps 配置项主要在 开发环境 中对依赖项发挥作用 optimizeDeps.entries vite optimizeDeps.entries 是 Vite 配置中的一个选项&#xff0c;用来指定要优化的入口文件。这在开发环境中尤其有用&#xff0c;因为它告诉 Vite 需要预构建哪些文件&#xff0c;以便加速…...

Shell基础:中括号的使用

在Shell脚本中&#xff0c;中括号&#xff08;[ ... ] 和 [[ ... ]]&#xff09;是一种常见的条件测试结构。它们用于进行文件类型检查、值比较以及逻辑判断。通过了解它们的不同特点和用法&#xff0c;能够帮助你编写更加高效、安全且易读的脚本。本文将详细介绍Shell中单中括…...

oracle ORA-27054报错处理

现象 在oracle执行expdp&#xff0c;rman备份&#xff0c;xtts的时候,由于没有足够的本地空间&#xff0c;只能使用到NFS的文件系统但有时候会出现如下报错 ORA-27054: NFS file system where the file is created or resides is not mounted with correct options根据提示信…...

SpringCloud速通教程

视频地址 文档地址 3. SpringCloud - 快速通关...

MapReduce分区

目录 1. MapReduce分区1.1 哈希分区1.2 自定义分区 2. 成绩分组2.1 Map2.2 Partition2.3 Reduce 3. 代码和结果3.1 pom.xml中依赖配置3.2 工具类util3.3 GroupScores3.4 结果 参考 本文引用的Apache Hadoop源代码基于Apache许可证 2.0&#xff0c;详情请参阅 Apache许可证2.0。…...

python算法和数据结构刷题[3]:哈希表、滑动窗口、双指针、回溯算法、贪心算法

回溯算法 「所有可能的结果」&#xff0c;而不是「结果的个数」&#xff0c;一般情况下&#xff0c;我们就知道需要暴力搜索所有的可行解了&#xff0c;可以用「回溯法」。 回溯算法关键在于:不合适就退回上一步。在回溯算法中&#xff0c;递归用于深入到所有可能的分支&…...

JDK 中 NIO 框架设计与实现:深入剖析及实战样例

一、引言 在 Java 的发展历程中&#xff0c;I/O&#xff08;Input/Output&#xff09;操作一直是构建高效、稳定应用程序的关键环节。传统的 Java I/O 操作基于流&#xff08;Stream&#xff09;的方式&#xff0c;虽然简单易用&#xff0c;但在面对高并发、大规模数据传输等场…...

基于springboot校园点歌系统

基于Spring Boot的校园点歌系统是一种专为校园场景设计的音乐点播平台&#xff0c;它能够丰富学生的校园生活&#xff0c;提升学生的娱乐体验。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 在校园环境中&#xff0c;学生们对于音乐有着浓厚的兴趣&#xff0c;传…...

Spring 核心技术解析【纯干货版】- IX:Spring 数据访问模块 Spring-Jdbc 模块精讲

在现代企业级应用中&#xff0c;数据访问层的稳定性和高效性至关重要。为了简化和优化数据库操作&#xff0c;Spring Framework 提供了 Spring-JDBC 模块&#xff0c;旨在通过高度封装的 JDBC 操作&#xff0c;简化开发者的编码负担&#xff0c;减少冗余代码&#xff0c;同时提…...

React开发中箭头函数返回值陷阱的深度解析

React开发中箭头函数返回值陷阱的深度解析 一、箭头函数的隐式返回机制&#xff1a;简洁背后的规则二、块函数体中的显式返回要求&#xff1a;容易被忽视的细节三、真实场景下的案例分析案例1&#xff1a;忘记return导致组件渲染失败案例2&#xff1a;异步操作中的返回值陷阱 四…...

线程同步时定义 std::mutex 为什么要在前面添加 mutable 关键字

在C中&#xff0c;mutable关键字用于修饰类的成员变量&#xff0c;表示即使在一个const对象中&#xff0c;该成员变量也可以被修改。对于mutex这样的同步原语&#xff0c;使用mutable是必要的&#xff0c;原因如下&#xff1a; 1. 为什么需要 mutable&#xff1f; mutex通常用…...

【多线程】线程池核心数到底如何配置?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…...

Linux find 命令 | grep 命令 | 查找 / 列出文件或目录路径 | 示例

注&#xff1a;本文为 “Linux find 命令 | grep 命令使用” 相关文章合辑。 未整理去重。 如何在 Linux 中查找文件 作者&#xff1a; Lewis Cowles 译者&#xff1a; LCTT geekpi | 2018-04-28 07:09 使用简单的命令在 Linux 下基于类型、内容等快速查找文件。 如果你是 W…...

爬楼梯(dp)杭电复试

一个楼梯共有 nn 级台阶&#xff0c;每次可以走一级或者两级或者三级&#xff0c;问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。 输入格式 一个整数 NN。 输出格式 一个整数&#xff0c;表示方案总数。 数据范围 1≤N≤201≤N≤20 输入样例&#xff1a; 4输出样…...

JVM执行引擎

一、执行引擎的概述: 执行引擎是]ava虚拟机核心的组成部分之一; “虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引擎则…...

企业四要素如何用PHP进行调用

一、什么是企业四要素&#xff1f; 企业四要素接口是在企业三要素&#xff08;企业名称、统一社会信用代码、法定代表人姓名&#xff09;的基础上&#xff0c;增加了一个关键要素&#xff0c;通常是企业注册号或企业银行账户信息。这种接口主要用于更全面的企业信息验证&#x…...

基于springboot河南省旅游管理系统

基于Spring Boot的河南省旅游管理系统是一种专为河南省旅游行业设计的信息管理系统&#xff0c;旨在整合和管理河南省的旅游资源信息&#xff0c;为游客提供准确、全面的旅游攻略和服务。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 河南省作为中国的中部省份&…...

arm 下 多线程访问同一变量 ,使用原子操作 性能差问题

arm下原子操作性能差的原因 Linux Kernel(armv8-aarch64) 的原子操作的底层实现 - 极术社区 - 连接开发者与智能计算生态 arm 下如何解决 ARMs LSE (for atomics) and MySQL – MySQL On ARM – All you need to know about MySQL (and its variants) on ARM. arm 下lse 和…...

嵌入式工程师必学(143):模拟信号链基础

概述: 我们每天使用的许多电子设备,以及我们赖以生存的电子设备,如果不使用电子工程师设计的实际输入信号,就无法运行。 模拟信号链由四个主要元件组成:传感器、放大器、滤波器和模数转换器 (ADC)。这些传感器用于检测、调节模拟信号并将其转换为适合由微控制器或其他数…...

PyQt6/PySide6 的 QDialog 类

QDialog 是 PyQt6 或 PySide6 库中用于创建对话框的类。对话框是一种特殊的窗口&#xff0c;通常用于与用户进行短期交互&#xff0c;如输入信息、显示消息或选择选项等。QDialog 提供了丰富的功能和灵活性&#xff0c;使得开发者可以轻松地创建各种类型的对话框。下面我将详细…...

【AI日记】25.02.05 自由不是一种工具

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Backpack Prediction Challenge感想&#xff1a;这次比赛的数据集的一大特点是信号过弱或者噪声过大&#xff0c;也是一大难点&#xff0c;即使kaggle 官方增加了一…...

【原子工具】快速幂 快速乘

题幂算.一切即1 阴阳迭变积微著&#xff0c;叠浪层峦瞬息功 莫道浮生千万事&#xff0c;元知万象一归宗 文章目录 快速幂原始快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 模下意义的快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 快速乘龟速…...

2024年12月 Scratch 图形化(四级)真题解析 中国电子学会全国青少年软件编程等级考试

202412 Scratch 图形化&#xff08;四级&#xff09;真题解析 中国电子学会全国青少年软件编程等级考试 一、选择题(共10题&#xff0c;共30分) 第 1 题 列表存放全班同学的身高&#xff0c;小猫运行下列程序&#xff0c;下列选项说法正确的是&#xff1f;&#xff08; &#…...

【面试宝典】机器学习:深度解析高频面试题与解答策略

目录 &#x1f354; 机器学习中特征的理解 &#x1f354; 机器学习三要素如何理解? &#x1f354; 机器学习中&#xff0c;有哪些特征选择的⼯程⽅法&#xff1f; &#x1f354; 机器学习中的正负样本 &#x1f354; 线性分类器与⾮线性分类器的区别及优劣 &#x1f354…...

使用 ElementUI 和 Spring 实现稳定可靠的文件上传和下载功能

前端(ElementUI) 1. 文件上传 使用 el-upload 组件配置上传接口处理上传成功和失败<template><div><el-uploadclass="upload-demo"action="http://your-server-url/upload":on-success="handleSuccess":on-error="handle…...

Linux驱动---字符设备

目录 一、基础简介 1.1、Linux设备驱动分类 1.2、字符设备驱动概念 二、驱动基本构成 2.1、驱动模块的加载和卸载 2.2、添加LICENNSE以及其他信息 三、字符设备驱动开发步骤 3.1、分配主次设备号 3.1.1 主次设备号 3.1.2静态注册设备号 3.1.3动态注册设备号 3.1.4释…...

FastReport.NET控件篇之交叉表控件

认识交叉表 上面是交叉表的原型&#xff0c;关键的三个单元格。 单元格①&#xff1a;用于扩展行数据&#xff0c;譬如打印学生成绩表时&#xff0c;每个学生一行&#xff0c;那么这个地方就是以学生姓名列进行打印。 单元格②&#xff1a;用于扩展列数据&#xff0c;譬如打印…...

构建高效复杂系统的关键:架构与模块详解

目录 一、复杂系统组成 二、接入系统 (Access System) 三、应用系统 (Application System) 四、基础平台 (Foundation Platform) 五、中间件 (Abundant External Middleware) 六、支撑系统 (Supporting System) 七、总结 参考文章 干货分享&#xff0c;感谢您的阅读&am…...

C++之递归

递归 递归函数是指一个函数直接或间接地调用自身。递归函数通常用于解决可以分解为相似子问题的问题&#xff0c;例如计算阶乘、斐波那契数列、遍历树结构等 基本结构 一个递归函数通常包含两个部分&#xff1a; 基准条件&#xff08;Base Case&#xff09;&#xff1a;这是…...

pushgateway指标聚合问题

一 问题现象 一个job有多个实例推送指标&#xff0c;但是从pushgateway上看这个job的instance字段&#xff0c;只显示一个实例的ip&#xff0c;而不是多个实例。导致在grafana上无法正常根据ip查看监控。 应用的prometheus的配置 management:metrics:tags:application: ${spr…...

mini-lsm通关笔记Week2Day7

项目地址&#xff1a;https://github.com/skyzh/mini-lsm 个人实现地址&#xff1a;https://gitee.com/cnyuyang/mini-lsm 在上一章中&#xff0c;您已经构建了一个完整的基于LSM的存储引擎。在本周末&#xff0c;我们将实现存储引擎的一些简单但重要的优化。欢迎来到Mini-LSM的…...

[权限提升] Windows 提权 维持 — 系统错误配置提权 - 注册表权限配置错误提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;注册表权限配置错误提权原理 通常 Windows 中的服务都是以 System 权限运行的&#xff0c;而 Windows 的服务程序的启动路径又是存放在注册表中的&#xff0c;若注册表配置不…...

产品经理的人工智能课 02 - 自然语言处理

产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型&#xff08;Large Language Models, LLMs&#xff09;是自然语…...

软件工程导论三级项目报告--《软件工程》课程网站

《软件工程》课程网站 摘要 本文详细介绍了《软件工程》课程网站的设计与实现方案&#xff0c;包括可行性分析、需求分析、总体设计、详细设计、测试用例。首先&#xff0c;通过可行性分析从各方面确认了该工程的可实现性&#xff0c;接着需求分析明确了系统的目标用户群和功能…...

FPGA|IP核PLL调用测试:调用IP核

1、选择tools-》Megawizard plug-In manager 2、选择第一项&#xff0c;下一步 3、选择ATPLL&#xff0c;芯片系列、和输出文件类型&#xff0c;输出文件名称&#xff0c;单击next 4、出现配置PLL界面 5、选择输入时钟频率&#xff0c;单击next 6、生成reset、和locked信号&…...

leetcode_双指针 160.相交链表

160.相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 思路: 本题中&#xff0c;交点不是数值相等&#xff0c;而是指针相等 双指针遍历两遍后必定相遇&#xff0c…...