Uva120--strok()和sscanf()的运用

来源:互联网 发布:qq forpad网络链接错误 编辑:程序博客网 时间:2024/04/28 12:14

这题就是折腾排序,但是此题的输入有需要注意的地方。

一定要用好strtok()和sscanf()这两个不怎么常见的函数,灵活使用。 

题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=98&problem=56&mosmsg=Submission+received+with+ID+12260032

代码:

#include <iostream>#include <algorithm>#include <stdio.h>#include <string.h>#define rep(n)  for(int               repp = 0; repp <    (n); ++repp)using namespace std;static char str[100];static int num[50];static int nums[50];void fun(int a,int b){int i,j;int use[50];for(i=b,j=0;i>=a;i--,j++)use[j]=num[i];for(i=a;i<=b;i++)num[i]=use[i];return;}int main(void){while(gets(str)!=NULL){printf("%s\n",str);int t=0,judge=0;char *p;p=strtok(str," ");sscanf(p,"%d",&num[t++]);while(p){p=strtok(NULL," ");if(p)sscanf(p,"%d",&num[t++]);}int i,j;for(i=0;i<t;i++)nums[i]=num[i];sort(nums,nums+t);int k=t-1;for(j=t-1;j>=0;j--){for(i=0;i<t;i++){if(nums[j]==num[i]){if(i==0 && j!=0){if(judge==1){putchar(' ');}printf("%d",t-k);judge=1;fun(0,k);k--;break;}else if(i==k){k--;break;}else{if(judge==1){putchar(' ');}printf("%d",t-i);fun(0,i);judge=1;i=-1;continue;}}}}if(judge==1){putchar(' ');} printf("0\n");}return 0;}


原创粉丝点击