FZU 2111
2016-04-15 11:12
204 查看
J - Min Number
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice FZU
2111
Description
Now you are given one non-negative integer n in 10-base notation, it will only contain digits ('0'-'9'). You are allowed to choose 2 integers i and j, such that: i!=j, 1≤i<j≤|n|, here |n| means the length of n’s 10-base notation. Then we can swap n[i] and
n[j].
For example, n=9012, we choose i=1, j=3, then we swap n[1] and n[3], then we get 1092, which is smaller than the original n.
Now you are allowed to operate at most M times, so what is the smallest number you can get after the operation(s)?
Please note that in this problem, leading zero is not allowed!
Input
The first line of the input contains an integer T (T≤100), indicating the number of test cases.
Then T cases, for any case, only 2 integers n and M (0≤n<10^1000, 0≤M≤100) in a single line.
Output
For each test case, output the minimum number we can get after no more than M operations.
Sample Input
39012 09012 19012 2
Sample Output
901210921029
特别的烦人,思路正确,怎么写都错了,这道题该几个小时了,最后没了耐心,心塞塞的
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1005;
char str
;
int main()
{
int T;
int n;
scanf("%d",&T);
while(T--)
{
scanf("%s%d",str,&n);
int len = strlen(str);
int index ,cnt = 0;
for(int i = 0; i < len; i++)
{
if(cnt >= n)
{
break;
}
int min = INF;
for(int j = len - 1; j >= i; j--)
{
if(min > str[j] && (str[j] != '0' || i ))//str[j] != '0' || i 这个用来控制i为零时其值不能为零,挺简单的然而我没有想到
{
min = str[j];
index = j;
}
}
if (str[i] - str[index] > 0)
{
swap(str[i],str[index]);
cnt++;
}
}
printf("%s\n",str);
}
return 0;
}
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice FZU
2111
Description
Now you are given one non-negative integer n in 10-base notation, it will only contain digits ('0'-'9'). You are allowed to choose 2 integers i and j, such that: i!=j, 1≤i<j≤|n|, here |n| means the length of n’s 10-base notation. Then we can swap n[i] and
n[j].
For example, n=9012, we choose i=1, j=3, then we swap n[1] and n[3], then we get 1092, which is smaller than the original n.
Now you are allowed to operate at most M times, so what is the smallest number you can get after the operation(s)?
Please note that in this problem, leading zero is not allowed!
Input
The first line of the input contains an integer T (T≤100), indicating the number of test cases.
Then T cases, for any case, only 2 integers n and M (0≤n<10^1000, 0≤M≤100) in a single line.
Output
For each test case, output the minimum number we can get after no more than M operations.
Sample Input
39012 09012 19012 2
Sample Output
901210921029
特别的烦人,思路正确,怎么写都错了,这道题该几个小时了,最后没了耐心,心塞塞的
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1005;
char str
;
int main()
{
int T;
int n;
scanf("%d",&T);
while(T--)
{
scanf("%s%d",str,&n);
int len = strlen(str);
int index ,cnt = 0;
for(int i = 0; i < len; i++)
{
if(cnt >= n)
{
break;
}
int min = INF;
for(int j = len - 1; j >= i; j--)
{
if(min > str[j] && (str[j] != '0' || i ))//str[j] != '0' || i 这个用来控制i为零时其值不能为零,挺简单的然而我没有想到
{
min = str[j];
index = j;
}
}
if (str[i] - str[index] > 0)
{
swap(str[i],str[index]);
cnt++;
}
}
printf("%s\n",str);
}
return 0;
}
相关文章推荐
- 软件工程实验一 复利计算——观赏其他团队工程
- innerHTML与appendChild(newnodeText)的区别
- 博客参考评论
- ArcGIS Server开发教程系列(1) Arcgis server 10.1 的安装
- 泛型
- 自定义抽屉—QQ特效
- C++中先于main执行
- java环境变量配置
- 关于openssl资源的环境变量配置
- Hadoop Sqoop;从HDFS导入数据到MYSQL数据库中出现中文字符乱码
- 把截取的视频做成Gif格式(Gifrocket)
- 谷歌注册失败 手机已多次注册
- C++的值调用和引用调用
- Quartz Configuration Reference
- Ubuntu下shell脚本运行异常:bash和dash的区别
- 算法练习——完全数
- do{} while(0) 的意义和用法
- Windows DLL编程中的导入导出:__declspec(dllimport) ,__declspec(dllexport) ,
- ASP.NET中 CheckBox复选框控件的使用
- Linux常用命令 经典版