8 条题解

  • 1
    @ 2024-4-6 11:49:09

    STL容器直接套模板

      • #include<bits/stdc++.h>
    • using namespace std;

      #define pb(s) push_back(s)

      int main()

      {

      int n;

      cin>>n;

      vector<int>v;

      while(n--)

      {

      int m;

      cin>>m;

      v.pb(m);

      }

      sort(v.begin(),v.end());

      auto list=unique(v.begin(),v.end());

      v.erase(list,v.end());//删除重复元素

      set<int> s(v.begin(), v.end());

      cout << s.size() << endl;

      for(const auto &num:v)

      cout<<num<<" ";

      cout<<endl;

      return 0;

      }

    • 0
      @ 2025-10-5 14:07:55

      先用一个数组先存下,然后用另一个数组存下排序和去重后的数

      #include<stdio.h>
      int main()
      {
          int a[10001],n,b[10001],temp,sum=0;
          scanf("%d",&n);
          for(int i=0;i<n;i++){
              scanf("%d",&a[i]);
          }for(int j=0;j<n;j++){
              for(int k=j+1;k<n;k++){
                  if(a[j]>a[k]){
                      temp=a[j];
                      a[j]=a[k];
                      a[k]=temp;
                  }
              }
          }if(n>0){
              b[sum]=a[0];
              sum++;
              for(int l=1;l<n;l++){
                  if(a[l]!=a[l-1]){
                      b[sum]=a[l];
                      sum++;
                  }
              }
          }printf("%d\n",sum);
          for(int i=0;i<sum;i++){
              printf("%d ",b[i]);
          }
          return 0;
      }
      
      • 0
        @ 2025-1-8 13:09:22

        我就不分享代码了。思路利用容器的思想,我只学习了桶排序,所以我分享桶排序的思想:用数组接受所得到的随机数,再通过桶排序(开一个很大的数组,全部为0,如果输入得数和数组下标相同就放进去,并且进行++,一直这样进行,如果数组的值大于1说明有好几个这种数),由小到大排列,但排列完成后输出时,通过在内部一个while循环(也就是,先for循环输出,里面嵌套while看是否有数>1,有的话让它只输出一个即可)看是否有 ,有重复数字的就只输出一个。剩下的数字输出正常输出就行。这就是借助一个容器的思想。当然你也可以采取其他排序,只需要和我的去重思路差不多就行。

        • 0
          @ 2024-10-17 23:51:50

          //肝了一个小时写出来了 #include<stdio.h>

          int main() { int a[888],n,temp,i,j,x; scanf("%d",&n);

          scanf("%d",&a[0]);

          for(i=1;i<n;i++) { scanf("%d",&a[i]);

          } for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(a[i]==a[j])

          { for(x=j;x<n;x++) //借助变量x,删除下标为j的元素,并将j后面的元素全部向前一步。

          { a[x]=a[x+1]; } j--;//j后面的每个元素向前移动1,使后面的元素仍占j位置,j不变 n--; //数据元素总数减一

          } } } printf("%d\n",n); for(i=1;i<n;i++) //冒泡必学的

          { for(j=0;j<n-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(i=0;i<n;i++) { printf("%d\n",a[i]);

          } return 0; } //虽然超时了,但是不能丢分儿

          • 0
            @ 2023-10-7 20:12:18
            
            #include<stdio.h>
            int a[1001];
            int main()
            {   int n;
            	scanf("%d",&n);
            	int tmp;
            	for(int i=1;i<=n;i++)
            	   {
            	   	scanf("%d",&tmp);
            	   	a[tmp]++;
            	   }
            	   int sum=0;
            	   for(int i=1;i<=1000;i++)
            	       {
            	       	if(a[i])
            	       	  {  
            	       	  	sum++;
            			  }
            		   }
            		   printf("%d\n",sum);
            		for(int i=1;i<=1000;i++)
            	       {
            	       	if(a[i])
            	       	  {  
            	       	  	printf("%d ",i);
            			  }
            		   }
            	return 0;
            	   
            }
            
            • 0
              @ 2023-10-5 10:53:01
              #include<stdio.h>
              int main()
              {
                  int n;
                  scanf("%d",&n);
                  int a[1000+5],box[1000+5]={0};
                  int cnt=0;
                  for(int i=0;i<n;i++){
                      scanf("%d",&a[i]);
                      box[a[i]]++;
                  }
                  for(int i=0;i<=1005;i++){
                      if(box[i]>0){
                          cnt++;
                      }
                  }
                  printf("%d\n",cnt-1);
                  for(int i=0;i<=1000;i++){
                      if(box[i]>0){
                          printf("%d ",i);
                          
                      }
                  }  
                  return 0;
              }
              
              • 0
                @ 2023-10-5 10:50:15
                #include <stdio.h>
                #include <iostream>
                #include <set>
                int oi[1100];
                
                using namespace std;
                
                int main()
                {
                    int m;
                    scanf("%d",&m);
                    set<int> st;
                    for (int i=0;i<m;i++)
                    {
                        int pick;
                        scanf("%d",&pick);
                        st.insert(pick);
                    }
                    cout << st.size() << endl;
                    	for(set<int>::iterator it = st.begin(); it != st.end(); it++)
                	{
                		cout << *it <<' ';
                	}
                	
                    return 0;
                }
                
                • 0
                  @ 2023-9-28 8:43:54

                  分享一位csdn大神的神级脑回路 我愿称之为最强 //这个程序做的事形象点就是:这里有一千个空位置(a[1001]={0}),这一千个位置标号就是从一到一千,然后来N个学生,第一个学生学号是t,t位置肯定是空的(a[t]==0),学生就站过去(这时候a[t]==0),学生t因为第一个来很开心;接下来学生学号b(b<t),就站到b位置,而且站在了学生t的前面,学生t就有些不爽,有一个学生学号c(c>t),就站到c位置,站在了学生t的后面,学生t露出了骄傲的微笑;如果这时候又有一个学号是t的,他位置有人了,就只能悄悄地离开,不留下一片云彩,第一个学生t没什么反应,…。最后看几个位置有人(a[t]! =0)(等于第一个学生t不爽和小骄傲的总次数),然后让他们从小到大报数(输出排序后的随机数)。

                  这思路顶礼膜拜!

                  #include<stdio.h>
                    int main(){
                        int N,a[1001]={0},t,i;
                        int count=0; 
                       scanf("%d",&N);
                        for(i=0;i<N;i++){
                           scanf("%d",&t);
                            if(a[t]==0){
                                a[t]=t;
                               count++;
                          }
                       }
                       printf("%d\n",count);
                       for(i=0;i<1001;i++){
                           if(a[i]!=0)
                               printf("%d ",a[i]);
                       }
                       return 0;
                   }
                  
                  • 1

                  信息

                  ID
                  136
                  时间
                  1000ms
                  内存
                  128MiB
                  难度
                  6
                  标签
                  (无)
                  递交数
                  1090
                  已通过
                  317
                  上传者