【C/C++】简单模拟题解

有52张朴克牌,使它们全部正面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成正面朝下;接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;接着从第4张牌开始,把凡是4的倍数位置上的牌按次此规律翻转;依此类推,直到第1张要翻的牌是第52张为止。统计最后有几张牌正面朝上,并打印出它们的位置。

#include<stdio.h>

int main(){
    int a[53],k=0;
    for(int m=1;m<=52;m++){
        a[m]=1;
    }
    for(int i=2;i<=52;i++){
        for(int j=i;j<=52;j++){
            if(j%i==0){
                a[j]=a[j]*(-1);
            }
        }
    }
    for(int n=1;n<=52;n++){
        if(a[n]==1){
            k++;
            printf("%d ",n);
        }
    }
    printf("\n总共有%d张牌正面朝上\n",k);
    return 0;
}

逆序
将数组中的数据按逆序存放

#include<stdio.h>

int main(){
    const int N = 10;
    int a[N];
    int i,j,tmp;
    for(int i=0;i<N;i++){
        scanf("%d",&a[i]);
    }
    i=0,j=N;
    while(i<j){
        tmp=a[i];
        a[i]=a[j-1];
        a[j-1]=tmp;
        i++;
        j--;
    }
    for(int i=0;i<N;i++){
        printf("%d ",a[i]);
    }
    return 0;
}

示例:
3 5 1 2 8 7 9 4 10 6
6 10 4 9 7 8 2 1 5 3

若两素数之差为 2,则称两素数为双胞胎数。求出 [2, 300] 之内:
(1)所有素数并保存到文件 prime.txt 种
(2)有多少对双胞胎数
(3)最大的一对双胞胎数

#include<stdio.h>
#include<math.h>

int isprime(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}

int main(){
    int i,count=0;
    int prime[100][2];
    FILE * fp;
    if((fp = fopen("prime.txt","a+"))== NULL){
        printf("文件打开失败!\n");
		exit(0);
    }
    for(i=2;i<=298;i++){
        if(isprime(i) && isprime(i+2)){
            fprintf(fp,"%d %d\n",i,i+2);
            prime[count][0]=i;
            prime[count][1]=i+2;
            count++;
        }
    }
    printf("有%d对双胞胎数,最大的一对为%d和%d\n",count,prime[count-1][0],prime[count-1][1]);
    fclose(fp);
    return 0;
}

一维数组实现杨辉三角

#define LASTROW 10
int main(){
	int row, col a[11];
	a[1] = 1;
	printf("%4d\n", a[1]);
	for(row = 2; row <= LASTROW; row++)
	{
		a[row] = 1;
		for( col = row - 1; col >= 2; col--)
			a[col] = a[col] + a[col - 1];
		for(col = 1; col <= row; col++)
			printf("%4d", a[col]);
		printf("\n");
	}