解题思路
这题就像逗我玩似的,这连简单题都算不上。
AC代码
#include<cstdio> using namespace std; int main() { double x, y; scanf("%lf", &x); if (x >= 0 && x < 5)y = 2.5 - x; else if (x >= 5 && x < 10)y = 2 - 1.5*(x - 3)*(x - 3); else if (x >= 10 && x < 20)y = x / 2 - 1.5; printf("%.3lf", y); return 0; }
解题思路
简单题,读取一整行用C的gets()函数,VS2017没有这个函数,Dev和OJ可以过。
AC代码
#include<cstdio> #include<cstring> using namespace std; int main() { char s[505]; gets(s); int len = strlen(s); for (int i = 0; i < len; i++) { if (s[i] == ‘ ‘)printf(" "); if (s[i] == ‘_‘)continue; else { int wlen = 0; int tmp = i; while (s[tmp] != ‘ ‘) { wlen++; tmp++; if (tmp >= len) break; } for (int j = i + wlen - 1; j >= i; j--) { printf("%c", s[j]); s[j] = ‘_‘; } } } return 0; }
解题思路
简单题,最基础的二维数组。
AC代码
#include<cstdio> #include<cstring> int N[205][205]; int main() { int m, n;//列和行 char s[205]; scanf("%d", &m); scanf("%s", s); int len = strlen(s); n = len / m; int cnt = 1; for (int i = 0; i < n; i++)//按行读入 { if (cnt % 2)//奇数行正向读入 { for (int j = 0; j < m; j++)N[i][j] = s[i*m + j]; cnt++; } else//偶数行反向读入 { for (int j = m - 1; j >= 0; j--)N[i][m - 1 - j] = s[i*m + j]; cnt++; } } for (int j = 0; j < m; j++)//按列输出 { for (int i = 0; i < n; i++)printf("%c", N[i][j]); } return 0; }
解题思路
详细讲解见二叉树专题。核心思想其实很简单,用数组就可以直接做,无非就是根据前序遍历的结果对中序遍历左右子串分别递归,最后后序打印根节点的值。
AC代码
#include<cstdio> #include<cstring> char s1[10000];//存储前序 char s2[10000];//存储中序 void f(int l, int l2, int r2)//总是需要前序遍历的起点和中序遍历的两端,以确定根结点和左右子树 { if (l2 == r2)return;//没有元素了 char r = s1[l];//根结点 int loc = l2; while (s2[loc] != r)loc++;//找到根结点在中序遍历中的位置 f(l + 1, l2, loc); f(l + loc + 1 - l2, loc + 1, r2);//画一画情况就知道了 printf("%c", r); } int main() { while (scanf("%s%s", s1, s2) != EOF) { int len = strlen(s1); f(0, 0, len); printf("\n"); } return 0; }
解题思路
AC代码
原文:https://www.cnblogs.com/yun-an/p/11111865.html