【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");
}