1 条题解

  • 0
    @ 2021-6-15 10:13:21

    C :

     /*有52张扑克牌,使它们全部正面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成正面朝下;
     接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;
     接着从第4张牌开始,把凡是4的倍数位置上的牌按此规律翻转;
     依此类推,直到第1张要翻的牌是第52张为止。统计最后有几张牌正面朝上,并打印出它们的位置。*/
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int a[53];
    int q[53];
    int main()
    {int m=0,i,j,c=0,k=0;
        
        memset(a,0,sizeof(a));//0 up
        for(i=2;i<=52;i++)
        {
         for(j=i;j<=52;j=j+i)
       {
         a[j]=!a[j];  }}
        
       for(m=1;m<=52;m++)
       {if (a[m]==0){q[c++]=m;}}
       printf("%d\n",c);
       for(i=0;i<c;i++)
       if(k==0){printf("%d",q[i]);k=1;}
       else printf(" %d",q[i]);return 0;}
    
    

    C++ :

    #include<cmath>
    #include<iostream>
    using namespace std;
    int main()
    {
    	int i;
    	bool a[52+1];
    	for (i=1;i<=52;i++)  a[i]=true;
    	for (i=2;i<=52;++i)
    	{
    		int j=i;
    		while (j<=52) {a[j]=!a[j]; j=j+i;}
    	}
    	int m=0;
    	for (i=1;i<=52;i++) if (a[i]) m++;	
    	cout<<m<<endl<<1;
    	for (i=2;i<=52;++i)
    		if (a[i]) cout<<" "<<i;
    	cout<<endl;
    	return 0;    
    }
    
    

    Java :

    public class Main {
    	public static void main(String[] args) {
    		int[] num=new int[52];
    		for(int i=0;i<52;i++)num[i]=1;
    		int b=2,count=0;
    		String s="";
    		while(b<=52){
    			for(int i=b-1;i<=51;i++){
    				if((i+1)%b==0)num[i]=-num[i];
    			}
    			b++;
    		}
    		for(int i=0;i<52;i++){
    			if(num[i]==1){
    				count++;
    				s+=i+1+" ";
    			}
    		}
    		System.out.println(count);
    		System.out.println(s.trim());
    	}
    }
    
    • 1

    信息

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