UVa1583,UVa1584(环形数组)
2018-01-26 12:02
274 查看
UVa1583
感觉这题就是暴力就好了,定义个100001的数组,对1-100000的每个数a1分解每一位然后相加,数组中下标为相加所得的数的那一位改为a1即可,最后输入,查表,输出。代码如下:
#include <iostream> using namespace std; int flag[100001]; void begin() { int i, j; int x; for (i = 0; i <= 100001; i++) { flag[i] = 0; } for (i = 0; i <= 100001;i++) { x = i; j = i; while (x > 0) { j += x % 10; x = x / 10; } if (flag[j] == 0) flag[j] = i; } } int main() { int N; int judge; begin(); cin >> N; for (int i = 0; i < N; i++) { cin >> judge; cout << flag[judge]<<endl; } //system("pause"); return 0; }
UVa1584
这题需要用到环形数组,其实就是取模运算,对每一个输入串,从0下标开始的环形串与1下标开始的环形串逐位比较,发现不同,则返回一个bool值,不断更新最小值,最后输出代码:
#include <iostream> #include <string> using namespace std; //环状数组 (i+j)%len /*int test[5] = { 1,2,3,4,5 }; void testRing() { for (int i = 0; i < 5; i++) { cout << test[i]; for (int j = 1; j <= 4; j++) { cout << test[(i + j) % 5]; } cout << endl; } }*/ bool judge(const string input, int p, int minPos) //p为需要与最小环比较的环,p更小的话返回1,否则返回0 { int len = (int)input.size(); for (int i = 0; i < len; i++) //逐一位比较 { if (input[(p + i) % len] != input[(minPos + i) % len]) return input[(p + i) % len] < input[(minPos + i) % len]; } //全部相等,结束循环 return 0; } int main() { int n; cin >> n; string input; for (int start = 0; start < n; start++) { cin >> input; int len = (int)input.size(); int minPos = 0; //定义最小环的起始位置 for (int i = 1; i < len; i++) { //判断各个环的字典序 minPos = judge(input, i, minPos) ? i : minPos; //输出目前最小环 /*for (int j = 0; j < len; j++) { cout << input[(minPos + j) % len]; } cout << endl;*/ } //cout << endl; //输出最小环 for (int i = 0; i < len; i++) { cout << input[(minPos + i) % len]; } cout << endl; } //system("pause"); return 0; }
相关文章推荐
- UVa 1584 Circular Sequence(环形串最小字典序)
- UVa 1584 Circular Sequence 【数组和字符串】
- 【模拟】【环形数组】-UVA-133- The Dole Queue |java实现
- 【模拟】【环形数组】-UVA-133- The Dole Queue
- UVA 1428 || LA 4329 PingPang (树状数组)
- 【数组模拟链表(双向)】UVA - 12657 Boxes in a Line
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- 例题3-6 环状序列(CircularSequence, ACM/ICPC Seoul 2004, UVa1584)
- UVa 1584 Circular Sequence
- UVa 11988 Broken Keyboard(数组模拟链表)
- UVALIVE 4329 Ping pong(树状数组)
- 输出一维环形数组中最大子数组和最大子数组的位置
- UVa 1513 / UVALive 5902 Movie collection (树状数组)
- UVA-1583 Digit Genarator
- 章三例题6——UVA 1584
- 二维数组求最大子数组和(环形)
- UVA 题目11512 - GATTACA(后缀数组求出现次数最多的子串及重复次数)
- UVa-1583 Digit Generator
- UVa 1400 "Ray, Pass me the dishes!"(区间最大连续数组和)
- 环形数组求最大子数组之和