部分回顾题

菱形图案

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“”组成的菱形图案。
输入
多组输入,一个整数(2~20)。
输出
针对每行输入,输出用“
”组成的菱形,每个“*”后面有一个空格。每输出一个菱形的后面需要空一行。
样例输入 Copy
2
3
4
样例输出 Copy
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
   while(~scanf("%d",&n)){
    char s[100][100];
    char a='*';
    char b=' ';

    for(int i=0;i<n;i++){
        for(int j=0;j<n-i;j++){printf(" ");}
        for(int k=0;k<=i;k++){printf("%c%c",a,b);}
        printf("\n");
}
for(int i=0;i<n+1;i++){printf("%c%c",a,b);}
printf("\n");
for(int p=n-1;p>=0;p--){
    for(int q=0;q<n-p;q++){printf(" ");}
    for(int g=0;g<=p;g++){printf("%c%c",a,b);}
    printf("\n");

}
printf("\n");
   }
    return 0;
}

牛妹的蛋糕

题目描述
众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一多一个,第二天又将剩下的蛋糕吃掉三分之一多一个,以后每天吃掉前一天剩下的三分之一多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?
输入
输入n,0<n< 30。
输出
输出第一天蛋糕的数量。
样例输入 Copy
2
4
样例输出 Copy
3
10

#include <stdio.h>
#include <stdlib.h>
int fun(int n){
        if(n==1)return 1;//第n天看作第一天,把要求的第1天看作第n天
        return (fun(n-1)+1)*3/2;}
int main(){
    int n;
    while(~scanf("%d",&n)){
       int sum=fun(n);
       printf("%d\n",sum);
    }
    return 0;
}

尼科彻斯定理

题目描述
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
输入
多组输入,输入一个整数。
输出
输出分解后的字符串。
样例输入 Copy
6
样例输出 Copy
31+33+35+37+39+41

#include <stdio.h>
#include <stdlib.h>
//规律就是奇数时这个数的平方就是正中间的数,就可以推出前后的数
//偶数时n/2位置是这个数的平方减一,以此类推
int main()
{
    int n;
    while(~scanf("%d",&n)){
            int a[n+1];
    int t=n*n;
        if(n%2==0){
                a[n/2]=t-1;

            for(int i=n/2-1;i>0;i--){
                a[i]=a[i+1]-2;
            }
            for(int j=n/2+1;j<n+1;j++){
                a[j]=a[j-1]+2;
            }

        }
        else{
                int p=n/2+1;
            a[p]=t;
            for(int i=p-1;i>0;i--){
                a[i]=a[i+1]-2;
            }
            for(int j=p+1;j<n+1;j++){
                a[j]=a[j-1]+2;
            }
        }
        for(int k=1;k<n;k++){
            printf("%d+",a[k]);
        }
        printf("%d\n",a[n]);

    }
    return 0;
}

ABC + DEF = GHI

题目描述
用1, 2, 3…9 这九个数字组成一个数学公式,满足:ABC + DEF = GHI,每个数字只能出现一次,编写程序输出所有的组合。
输入

输出
输出所有的 ABC + DEF = GHI,
每行一条数据,格式为ABC+DEF=GHI
输出结果按照ABC升序排列,如果ABC相同,则按照DEF升序排列。

#include <bits/stdc++.h>
//在全排列的基础上选出符合题意的组合,为了符合题目要求的输出格式,我用结构体保存每组的x,y,z,再最后排个序
#include <algorithm>
using namespace std;
int q=0;
struct Arr{
int x;
int y;
int z;
};
Arr arr[1000];
void perm(int a[],int k,int n){
int i,t;

if(k==n){
        int t1=a[0]*100+a[1]*10+a[2];
int t2=a[3]*100+a[4]*10+a[5];
int t3=a[6]*100+a[7]*10+a[8];
if((t1+t2)==t3){
    arr[q].x=t1;
    arr[q].y=t2;
    arr[q].z=t3;
    q++;}
}
for(i=k;i<=n;i++){
    {t=a[k];a[k]=a[i];a[i]=t;
    }
    perm(a,k+1,n);
    {
        t=a[k];a[k]=a[i];a[i]=t;
    }
    }
    }



bool cmp1(const Arr &a, const Arr &b){
if(a.x==b.x)
return a.y<=b.y;
else return a.x<=b.x;}
int main()
{
    int a[9]={1,2,3,4,5,6,7,8,9};
    perm(a,0,8);
    sort(arr,arr+q,cmp1);
    for(int j=0;j<q;j++){
    printf("%d+%d=%d\n",arr[j].x,arr[j].y,arr[j].z);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值