0

Given an ordered list of values, I want to group any members having the same value and output a count of each value:

For example,

input: [1,1,1,3,3,2,1,1] 
output:
[(1,3),(3,2),(2,1),(1,2)]

input:['a','a','b','b','c','a']
output:
[('a',2),(b,2),(c,1),(a,1)]

Additionally, I want to treat the first and last values specially. What is the optimal way to do this?

4

1 に答える 1

0

この問題の大まかな解決策を書き留めています。

main()
{
     char arr[100];
     int count[100],j=0,i,n;
     for(i=0;i<100;i++)
     {
         count[i] = 0;
     }
     scanf("%d\n",&n);
     scanf("\n%c",&arr[0]);
     count[j]=1;
     for(i=1;i<n;i++)
     {
         scanf("%c",&arr[i]);
         if(arr[i-1]==arr[i])
         {
             count[j]++;
         }
         else
         {
             j++;
             count[j]=1;
         }
     }
     for(i=0;i<=j;i++)
     {
         printf("%d\n",count[i]);
     }
}

ここでは、ユーザーから n 文字を読み取り、現在の文字を読み取った後、前の文字と現在の文字をチェックしています。カウント用に別の配列を保持しています。

それが役立つことを願っています...

于 2012-10-11T06:23:58.467 に答える