算法竞赛入门经典例题

7744问题

问题:输出所有形如aabb的四位完全平方数(即前两位数字相等,后两位数字也相等)

#include<stdio.h>

#include<math.h>

int main(){

int a,b;

for(a =1;a<=9;a++)

for(b=0;b<=9;b++)

{int n;

n=a*1100+b*11;

int m;

m=floor(sqrt(n)+0.5);

if(m*m=n)printf("%d\n",n);

}

return 0;

}

第二种解法

#include<stdio.h>

int main(){

for(x=1;;x++)

{

int n=x*x;

if(n<1000)continue;

if(n>9999)break;

int hi=n/100;

int lo=n%100;

if(hi/10==hi%10&&lo/10==lo%10)

printf(“%d”,n)

}

return 0;

}

逆序输出

#include<stdio.h>

#define maxn 105;

int a[maxn];//定义在主函数外  数组可以开到很大

int main(){

int x,n=0;

while(scanf("%d",&x)==1)//当有数据输入时

a[n++]=x;

for(i=n-1;i>=1;i--)

printf("%d",a[i]);//一般要求的行首行尾均无空格,相邻两个数据间用单个空格隔开,一共有n个整数,但是只有n-1个空格

printf("%d",a[0]);

return 0;}

开灯问题

#include<stdio.h>

#include<string.h>

#define maxn 1010

int a[maxn];

int main(){

int n,k,first=1;

memset(a,0,sizeof(a));//作用将数组清零;在string.h中定义

scanf("%d%d",&n,&k);

for(int i=1;i<=k;i++)//k个人

for(int j=1;j<=n;j++)//n盏灯

if(j%i==0)a[j]=!a[j];//第n个人按下n的倍数开关 ,关掉的灯将被打开,开着的灯将被关闭

for(int i=1;i<=n;i++){

if(a[i]){//判断输出的变量是否为第一个,如果是  first清零  输出第一个数 ,无空格

if(first)

first=0;

else printf(" ");

printf("%d",i);)

printf("\n");

return 0;

}

蛇形填数

#include<stdio.h>

#include<string.h>

#define maxn 20

int a[maxn][maxn];

int main(){

int n,x,y,tot=0;

scanf("%d",&n):

memset(a,0,sizeof(a));

tot=a[x=0][y=n-1]==1;

while(tot<n*n){

while(x+1<n &&  !a[x+1][y])a[++x][y]=++tot;//a[x+1][y]==0先判断是否越界   向下走

while(y-1>=0 && !a[x][--y])a[x][--y]=++tot;//向左走

while(x-1>=0 &&a[x--][y])a[x--][y]=++tot;//向上走

while(y+1<n &&a[x][y+1])a[x][++y]=++tot;//向右走

}

for(x=0;x<n;x++)

{

for(y=0;y<n;y++)

printf("%3d",a[x][y]);

printf("\n");

}

return 0;

}









  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值