菱形图案
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;
}