|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一个星期之后就要参加ITAT复赛了,就连我这么坑爹的都能进入复赛,真是坑爹中的坑爹!!!在下面三个题我就会一道,而且做了好久,请好心人帮我看看吧!!!谢谢了!!!
下面是网站,大家帮忙看看有没有相关例题,算法什么的,发链接或邮箱394428311·qq.com,谢谢了!!!
http://www.itatedu.com/itatCompete/compete7/files6/lnst_c2.htm
下面是我自己做的从一组数中删除n个数字,应该是对的吧!如有不对,帮忙指正一下,灰常感谢!!!- #include <stdio.h>
- #include <string.h>
- void f(char *a, int len, int n) //数组,长度,删除个数
- {
- int i, t, max, time = 0; //time记录while执行次数
-
- /*由于每次确定一个max,下标后移一位所以time至关重要!!!*/
-
- while(n) //直到n个删除完
- {
- if(time == len-n) //比如a=987654321,n=5;执行到9876,也就是len-n,删除54321
- {
- for(i = len-n; i < 100; i++)
- {
- a[i]='\0'; //len-n后面填充'\0'
- }
- break; //执行结束,退出
- }
-
- max = a[time]; //假定max为a[0],第二次a[1],第三次a[2]...
- t = time; //max下标
- for(i = time; i <= time+n; i++) //从前n+1位求出max
- {
- if(a[i] > max)
- {
- max = a[i];
- t = i; //max下标
- }
- }
- n = n+time-t; //注意time!!!
- for(i = time; a[i++] = a[t++];) //去年max前面所有的数字
- {
- ;
- }
- time++; //每次确定一个max,下标后移一位
- }
- }
- main()
- {
- char a[100];
- int n, len;
- gets(a);
- len = strlen(a);
- scanf("%d", &n);
- f(a, len, n);
- puts(a);
- }
复制代码 |
|