本文主要是介绍九度OJ 1361(反转) 1362(循环移位) 1363(判断) 1364(01背包) 1365(BFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1361:翻转单词顺序
http://ac.jobdu.com/problem.php?pid=1361
题意
将一行英文句子按单词反转。
思路
二维字符串存储,反转外围即可。
代码
#include <stdio.h>
#include <string.h>#define M 50000int main(void)
{int n, i, j, m, k;char s[M+1];while (gets(s)){n = strlen(s);i = n;while (i>0){m = i;while (i >= 0 && s[--i] == ' ');if (i<0)break;k = i;if (m != n){for (j=i+1; j<=m; j++)printf(" ");}while (i >= 0 && s[--i] != ' ' );//if (m != n)// printf(" ");for (j=i+1; j<=k; j++)printf("%c", s[j]);}printf("\n");}return 0;
}
/**************************************************************Problem: 1361User: liangrx06Language: CResult: AcceptedTime:210 msMemory:912 kb
****************************************************************/
1362:左旋转字符串
http://ac.jobdu.com/problem.php?pid=1362
题意
实现字符串的循环左移。
思路
用另外一个字符串存储要左移会被覆盖的那部分,然后放到后面即可。
代码
#include <stdio.h>
#include <string.h>#define N 1000int main(void)
{
int k, i, n;
char s[N+1], s2[N+1]; while (scanf("%s%d", s, &k) != EOF)
{
strcpy(s2, s); n = strlen(s);
k = k%n;
for (i=0; i<n-k; i++)
s[i] = s2[i+k];
for (; i<n; i++)
s[i] = s2[i+k-n]; printf("%s\n", s);
} return 0;
}
/**************************************************************
Problem: 1362
User: liangrx06
Language: C
Result: Accepted
Time:70 ms
Memory:912 kb
****************************************************************/
1363:欢乐斗地主
http://ac.jobdu.com/problem.php?pid=1363
题意
找出在上家出的牌是“三带一对”的情况下你手中的牌是否比上家的牌大。
思路
主要是注意特殊情况的考虑,比较简单。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define N 20int cmp(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}int main(void)
{int n, i, j, x;int a[N], b[N], rank[N];while (scanf("%d", &n) != EOF){memset(rank, 0, sizeof(rank));for(i=0; i<n; i++){scanf("%d", &a[i]);if (a[i] <= 2)a[i] += 13;rank[a[i]]++;}for(i=0; i<5; i++)scanf("%d", &b[i]);x = b[0];if (x <= 2)x += 13;for (i=x+1; i<=15; i++){if (rank[i] >= 3){for (j=3; j<=15; j++){if (j == i)continue;if (rank[j] >= 2)break;}if (j <= 15)break;}}if (i <= 15){if (i > 13)i -= 13;if (j > 13)j -= 13;printf("%d %d %d %d %d\n", i, i, i, j, j);}elseprintf("My God\n");}return 0;
}
/**************************************************************Problem: 1363User: liangrx06Language: CResult: AcceptedTime:70 msMemory:912 kb
****************************************************************/
1364:v字仇杀队
http://ac.jobdu.com/problem.php?pid=1364
题意
在地铁有限的空间中装载挑选出来的炸药使得地铁的破坏力最大。
思路
其实就是最基本的01背包。
代码
#include <stdio.h>
#include <string.h>#define N 100
#define M 1000int main(void)
{
int s, n, i, j;
int room[N], power[N];
int dp[M+1]; while (scanf("%d%d", &s, &n) != EOF)
{
for(i=0; i<n; i++)
scanf("%d%d", &room[i], &power[i]); memset(dp, 0, sizeof(dp));
for(i=0; i<n; i++)
{
for(j=s; j>=room[i]; j--)
{
int tmp = dp[j-room[i]] + power[i];
dp[j] = (tmp > dp[j]) ? tmp : dp[j];
}
} printf("%d\n", dp[s]);
} return 0;
}
/**************************************************************
Problem: 1364
User: liangrx06
Language: C
Result: Accepted
Time:170 ms
Memory:912 kb
****************************************************************/
1365:贝多芬第九交响曲
http://ac.jobdu.com/problem.php?pid=1365
题意
在一张二维棋盘上,按照中国象棋马的走法,从起点到终点的步数。
思路
基本的广度优先搜索,注意起点终点相同这种特殊情况的判断。
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;const int N = 100;
const int INF = 0x3f3f3f3f;int n;bool legal(int x, int y)
{return x >= 0 && x < n && y >= 0 && y < n;
}int BFS()
{int sx, sy, ex, ey;cin >> sx >> sy >> ex >> ey;sx--, sy--, ex--, ey--;int i;int d[N][N];typedef pair<int, int> P;queue <P> q;for (i = 0; i < n; i ++)fill(d[i], d[i]+n, INF);q.push(P(sx, sy));d[sx][sy] = 0;int pos[8][2] = {{1, 2}, {2, 1}, {1, -2}, {-2, 1},{-1, 2}, {2, -1}, {-1, -2}, {-2, -1}};while( q.size() ) {P p = q.front();q.pop();int x = p.first;int y = p.second;if (x == ex && y == ey)return d[x][y];for (i = 0; i < 8; i ++) {int nx = x + pos[i][0];int ny = y + pos[i][1];if (legal(nx, ny) && d[nx][ny] == INF) {q.push(P(nx, ny));d[nx][ny] = d[x][y]+1;}}}return -1;
}int main(void)
{while (cin >> n) {printf("%d\n", BFS());}return 0;
}
/**************************************************************Problem: 1365User: liangrx06Language: C++Result: AcceptedTime:730 msMemory:1524 kb
****************************************************************/
这篇关于九度OJ 1361(反转) 1362(循环移位) 1363(判断) 1364(01背包) 1365(BFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!