作为一个输出过程,自己看看
输入两个整数 �,�a,b,输出它们的和(∣�∣,∣�∣≤109∣a∣,∣b∣≤109)。
注意
- Pascal 使用
integer会爆掉哦!- 有负数哦!
- C/C++ 的 main 函数必须是
int类型,而且 C 最后要return 0。这不仅对洛谷其他题目有效,而且也是 NOIP/CSP/NOI 比赛的要求!
#include
using namespace std;//为了不加前缀名
int main() {int a, b;cin >> a >> b;cout << a + b;return 0;
}
#include
int main() {int a, b;scanf("%d%d", a, b);printf("%d", a + b);return 0;
}
//c++
#include
using namespace std;
//第一种方法就是讲元看成10
int main() {int a, b;cin >> a >> b;cout << ((a * 10) + b )/( 19);return 0;
}
//c
#define _CRT_SECURE_NO_WARNINGS
#include
int main() {int a,b;scanf("%d %d", &a, &b);printf("%d", (a * 10 + b)/ (19));return 0;
}
[P1422 小玉P1422 小玉家的电费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)家的电费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](https://www.luogu.com.cn/problem/P1422#submit)
#include
#include
using namespace std;int main() {int sum;cin >> sum;cout << fixed << setprecision(1);//保留小数点后一位if (sum <= 150) cout << sum * 0.4463;else if ( sum <=400) cout << 150 * 0.4463 + (sum - 150) * 0.4663;else cout << 150 * 0.4463 + 250 * 0.4663 + (sum - 400) * 0.5663;}
/C语言
//c
#define _CRT_SECURE_NO_WARNINGS
#include int main() {int sum;scanf("%d",&sum);if (sum <= 150) printf("%.1f", sum * 0.4463) ;else if (sum <= 400) printf("%.1f", 150 * 0.4463 + (sum - 150) * 0.4663) ;else printf("%.1f", 150 * 0.4463 + 250 * 0.4663 + (sum - 400) * 0.5663) ;
}
%用法
1 要输出float a=1.23234; 保留3位小数的写法为:
printf(“%.3f”,a);
2 输出double b=123.345232; 保留4为小数,写法为:
printf(“%.4lf”,b);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7MH08Cxo-1678635540235)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306000340152.png)]
int main() {int a, b, c;for (a = 0; a <= 9; a++) {for (b = 0; b <= 9; b++) {for (c = 0; c <= 9; c++) {if ((a * 100 + b * 10 + c) + (b * 100 + c * 10 + c) == 532)printf("%d %d %d", a, b, c);}}}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gsuyK3Y-1678635540236)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306023408982.png)]
int main() {int a, b, c, d,sum;for (a = 0; a <= 9; ++a) {for (b = 0; b < +9; ++b) {for (c = 0; c <= 9; ++c) {for (d = 0; d <= 9; ++d) {sum = a * 1000 + b * 100 + c * 10 + d;if (sum * 9 == (d * 1000 + c * 100 + b * 10 + a)) {if(sum>=1000)printf("%d\n", sum);}}}}}
}
王道用的是求余!!值得学习%%%%
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a8oj7vb2-1678635540236)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306030002374.png)]
int Reverse(int i) {int k = i * i;if (k < 10) {return k;}if (10int m = k % 10;//个位int n = k/10;//十位if (m == n) {return k;}}if (1000 > k&&k> 100) {int a = k % 10;int b = k / 100;if (a == b) {return k;}}if (k > 1000&&k<10000) {int a = k % 10;int b = k / 10 % 10;//十位int c = k / 100 % 10;//百位int d = k / 1000;//千位if ((a == d) && (b == c)) {return k;}}if (k > 10000 ) {int a = k % 10;int b = k / 10 % 10;//十位int c = k / 100 % 10;//百位int d = k / 1000%10;//千位int e = k / 10000;if ((a == e) && (b ==d)) {return k;}}return 0;
}
int main() {//本质上还是求的是逆序数//首先小于10肯定是int i=0;//再去找对称的数while (i<= 256) {if (Reverse(i) == i * i) {printf("%d\n", i);}i++;}
}
不得不说很久不巧写的方法比较笨==
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OhQqXc7P-1678635540237)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306162133904.png)]
int main() {printf("请输入一个整数\n");int n,h;scanf("%d", &h);int m = h,k;int H = h + (h - 1) * 3;for (h; h > 0; --h) {n = H - m;k = m;for (n; n > 0; --n) {printf(" ");}for (k; k >0;k-- ) {printf("*");}m += 2;printf("\n");}
}
//第一行为h的话,那么高度为h,即最底部的长度应该是
//H=h+(h-1)*3;
王道解法
int main() {int h;while (scanf("%d", &h) != EOF) {for (int i = 0; i < h; ++i) {for (int j = 0; j < 2 * h - 2 - 2 * i; ++j) {printf(" ");}for (int j = 0; j < h + 2 * i; ++j) {printf("*");}printf("\n");}}
}
char arr[3000][1000];
int main() {//用二维数组来模拟//第一步:填空int h;while (scanf("%d", &h)!= EOF) {for (int i = 0; i < h; i++) {for (int j = 0; j < 3 * h - 2; j++) {arr[i][j] = ' ';}}//填充完空格开始放星星int m = h - 1;int k =0;for (m; m >= 0; m--) {for (int n=k ; n<= 3 * h - 2;++n) {arr[m][n] = '*';}k += 2;}//打印for (int i = 0; i < h; i++) {for (int j = 0; j < 3 * h - 2; j++) {printf("%c",arr[i][j]);}printf("\n");}}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BV0REEMG-1678635540237)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306172043262.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGbPmDMc-1678635540238)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306172233290.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NM3eLDF7-1678635540238)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306172328511.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W5jrP8CU-1678635540238)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306172740950.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zmqRpElS-1678635540239)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306182210168.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ca2IIKZI-1678635540239)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230306193242901.png)]
错了看了王道解法,记得在markji上去背
int main() {int n;//外框长度char inner, outter;printf("请输入长度以及内外花色\n");bool flag = true;while (scanf("%d %c %c", &n, &inner, &outter) != EOF) {if (flag == true) {flag = false;}else{printf("\n");}char pattern[80][80] = { 0 };//方便最后以字符串的形式输出int length = 1;//一开始的外框长度int x, y;//坐标char changchar = inner;for (length = 1, x = n / 2, y = n / 2; length <= n; length = length + 2,--x,--y) {//填满周围的正方形for (int i = x, j = y; i < x + length; i++) {pattern[i][j] = changchar;}//左上横线for (int i = x, j = y; j < y + length; j++) {pattern[i][j] = changchar;}//左下横线for (int i = x + length - 1, j = y; j < y + length; j++) {pattern[i][j] = changchar;}//右边竖线for (int i = x, j = y + length - 1; i < x + length; ++i) {pattern[i][j] = changchar;}//做个翻转符号if (changchar == inner) {changchar = outter;}else{changchar = inner;}}//去四角if (n != 1) {pattern[0][0] = ' ';pattern[n - 1][0] = ' ';pattern[0][n - 1] = ' ';pattern[n - 1][n - 1] = ' ';}//输出图形for (int i = 0; i < n; i++) {printf("%s\n", pattern[i]);}}
}
//关键代码
//c++引入
//头文件
#include
using namespace std;
头文件cstdio
#include
/*作用:是C语言标准库中的一个头文件,其全称为"C Standard Input and Output Library"。这个库提供了用于执行输入输出操作的函数。其中包括常用的输入函数scanf()、getchar(),以及输出函数printf()、putchar()等。这些函数可以让程序员在C语言中进行标准输入输出,从而读写文件、屏幕、键盘等设备。在C语言中,可以用预处理指令“#include ”来引入。一旦引入了这个头文件,就可以在程序中使用库提供的函数。库函数的使用非常方便,而且效率高。因此,它是C语言程序员经常使用的一个标准库之一。由于C++是基于C语言的,所以在C++中也可以使用库中的函数。但是在C++中,建议使用iostream库进行输入输出操作,因为iostream库比更安全、更易于使用。
*/
using name space 作用解释
在C++中,using namespace std;是一个常用的语句,它的作用是告诉编译器使用std命名空间中的符号。std是C++标准库中许多类和函数所在的命名空间,如果不使用using namespace std语句,那么就需要使用std::来引用这些类和函数,例如std::cout、std::cin等。 使用using namespace std语句可以省略代码中的std::前缀,从而使代码更加简洁易读,但需要注意的是,这样做也会有一些潜在的问题,例如可能会引发命名冲突等问题。因此,一些C++编程规范建议尽可能不要在头文件中使用using namespace std;,而是在具体的源文件中使用。另外,也可以选择只使用需要的部分命名空间,例如using std::cout;只引入std命名空间中的cout符号,而不是整个std命名空间。 总之,using namespace std语句可以简化C++代码的编写,提高代码的可读性,但需要注意一些潜在的问题,并根据实际情况灵活使用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LzETv0w-1678635540239)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312143313541.png)]
#include
#include
using namespace std;int main(){int n;//要输入的数字while(scanf("%d",&n)!=EOF){int arr[101];//要输入的数字for (int i = 0; i < n; ++i){//一次输入数字同时放入数组scanf("%d",&arr[i]);}//对数组进行排序sort(arr,arr+n);//输出for (int i = 0; i < n; ++i){printf("%d",arr[i]);}}
}
注意点:
arr【i】和arr+i
其实表达意思是完全一样的
arr【i】表示的arr数组中第i号元素的具体值是多少
arr+i表达的意思是arr第i号元素的地址哦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJ6yrOLJ-1678635540240)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312144815703.png)]
注意end是尾巴后一个元素的位置
默认的排序是升序排序
sort(start,end,compare)//加上一个参数即为compare参数[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mkErHDS-1678635540240)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312145831814.png)]
using namespace std;bool compare(int lhs,int rhs){if(lhs>rhs){return true;}else{return false;}//也可以写成 return lhs>rhs//不发生交换时候返回真
}
int main(){int arr[8];for (int i = 0; i < 8; ++i) {scanf("%d",arr+i);}sort(arr,arr+8,compare);for (int i = 0; i < 8; ++i) {printf("%d",arr[i]);}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kx914wzC-1678635540240)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312181633384.png)]
#include
#include
using namespace std;
bool comp(int i,int j){//返回true不交换两个元素/*第一种情况:左奇数右边偶数不交换*/if(i%2==1&&j%2==0){return true;}else if(i%2==1&&j%2==1&&i>j){//第二种就是判断奇数如果左边大右边小不交换return true;}else if(i%2==0&&j%2==0&&i
使用了变长数组(Variable Length Arrays,VLA),即使用了变量n来定义了一个可以放入n个学生对象的数组students。在C++11标准之前,这种定义数组的方式是不合法的,导致代码可移植性不好,编译器的实现也不稳定。因此,应该使用常量或者宏定义来定义数组的长度,例如使用 #define MAX_STUDENT_NUM 100 来定义数组的最大长度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JqEMl4P6-1678635540241)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312192346582.png)]
#include
#include
#define MAX_STUDENT_NUM 100
using namespace std;
struct Student{int stuNum;int stuGrade;
};
bool compare(Student lhs,Student rhs){
/*成绩从小到大,排序不变也就是true* 若成绩相同,学号大小从小到大*/if(lhs.stuGrade
重要技巧:
由于sort底层(快速排序)其实本身并不是稳定的故我们需要自己去设置一个变量,来令其稳定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MkqaAkHy-1678635540241)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312194125321.png)]
#include
#include
using namespace std;
#define MAX_STUDENT_NUM 100
struct Student{char name[100];int score;//成绩int seq;//保证其有序
};
//升序排序参数
bool upper(Student lhs,Student rhs){if(lhs.scorerhs.seq){//相同成绩先录入在前return true;}else{return false;}
}
//降序排序参数
bool down(Student lhs,Student rhs){if(lhs.score>rhs.score){return true;} else if (lhs.score==rhs.score&&lhs.seq>rhs.seq){//相同成绩先录入在前return true;} else{return false;}
}
int main(){Student students[MAX_STUDENT_NUM];int n,order;//排序人数和排序方法while (scanf("%d%d",&n,&order)!=EOF){//依次输入学生信息int seq;for (int i = 0; i < n; ++i) {seq=0;scanf("%s%d",&students[i].name,&students[i].score);students[i].seq=seq;seq++;}//开始分析是低到高还是告到底if(order==1){//升序的情况sort(students,students+n, upper);//输出值printf("从高到低 成绩\n");for (int i = 0; i < n; ++i) {printf("%s %d\n",students[i].name,students[i].score);}}//降序的情况if(order==0){sort(students,students+n, down);printf("从低到高 成绩\n");for (int i = 0; i < n; ++i) {printf("%s %d\n",students[i].name,students[i].score);}}}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oto9TD2s-1678635540241)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312204056028.png)]
#include
using namespace std;int main(){//首先是输入一个数nint n;int arr[201];scanf("%d",&n);for (int i = 0; i < n; ++i){scanf("%d",&arr[i]);}int x;scanf("%d",&x);int i;for ( i = 0; i < n; ++i){if(arr[i]==x){printf("%d\n",i);break;}}if(i==n){//说明没有这个玩意printf("-1\n");}
}
遇到多个数据的时候最好的方式是排序+二分查找哦
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SssNUojp-1678635540242)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312204949484.png)]
容易出现的问题是
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4u1q1No-1678635540242)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312205154151.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f13bdNmY-1678635540242)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312231325674.png)]
在C++中,
std::map是一种关联式容器,它将键映射到值。我们可以使用map中的find方法来查找容器中是否存在某个指定的键。find函数的具体作用为:在map中查找键值等于指定键值的元素,如果能够找到,则返回指向该元素的迭代器;如果查找失败,则返回指向容器尾部的迭代器。函数的形式为:
c++ iterator map::find(const key_type& key); const_iterator map::find(const key_type& key) const;其中,key为要查找的键值,如果map中存在该键,则返回指向该元素的迭代器;否则返回指向容器尾部的迭代器。下面是一个使用
std::map::find函数的例子:
c++ #include#include 在这个例子中,我们定义了一个
std::map对象m,它将学生的姓名映射到他们的成绩。我们首先向m中添加了三个元素,然后使用find函数查找m中是否存在某个指定的键。第一个查找"Alice",由于这个键存在于m中,因此find函数返回指向该元素的迭代器,并输出对应的成绩。第二个查找"David",由于这个键不存在于m中,因此find函数返回指向容器尾部的迭代器,并输出一个提示信息。
find()常常会和end()配合使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sdGl6wcI-1678635540242)(C:\Users\达芬奇\AppData\Roaming\Typora\typora-user-images\image-20230312233708280.png)]
#include
#include
上一篇:前缀和 及其优化技巧