C语言打印正方形实例代码

目录
  • 题目描述
  • 输入
  • 输出
  • 样例输入
  • 样例输出

题目描述

由火柴棍组成的一个n×n的正方形,按从上到下,从左到右的顺序给火柴棍编号,从1开始,比如下图中,一共有24根火柴棍。 问去掉若干个火柴棍之后,这个图形中还存在多少个正方形?

如下图所示,n=3时,去掉12,17,23号火柴棒之后,还剩下5个正方形。

输入

第一行是一个整数T(1≤T≤1000),表示样例的个数。

每个样例的第1行是两个整数n(1≤n≤50),表示图形的宽度。 样例的第2行首先是一个整数m(0≤m≤2n(n+1),表示去掉火柴棍的个数,后面接m个整数,表示去掉火柴棍的序号,所有序号都是唯一的。

输出

依次,每行输出一个样例的结果

样例输入

2

0

3 12 17 23

样例输出

14

5

这道题还是有一定难度的,我的思路是:

将横棍与竖棍分别用二维数组表示,每一个棍赋值为1,而移除后其值被赋为0。

从长度为1的小正方形开始。

计算长度时将所在区间的值加起来,若四条边相等,且都等于小正方形边长,则符合。 

#include <stdio.h>
int heng[55][55],shu[55][55];
void give(int n)
{
    int i,j;
    for(i = 1;i <= n+1;i++)
    {
        for(j = 1;j <= n+1;j++)
        {
            heng[i][j] = 1;
            shu[i][j] = 1;
        }
    }

}
void Remove(int n,int m)//去除木棍
{
    int x,p;
    x = m / (2*n+1) +1;
    p = m % (2*n+1);
    if(p>=1 && p<=n)
    heng[x][p] = 0;
    else if(p==0)
    shu[x-1][n+1] = 0;
    else if(p>n && p <=2*n)
    shu[x][p-n] = 0;
}
int hl(int h,int s,int w)//h行从s到w列的横的长度
{
    int sum = 0;
    for(;s <= w;s++)
    sum += heng[h][s];
    return sum;
}
int sl(int s,int i,int j)//s列从i到j行竖的长度
{
    int sum = 0;
    for(;i <= j;i++)
    sum += shu[i][s];
    return sum;
}
int count(int len,int n)//len+1为小正方形边长
{
    int i,j,sum=0;
    for(i = 1;i+len <= n;i++)
    {
        for(j = 1;j+len <= n;j++)
        {
            if((hl(i,j,j+len)==len+1) && (sl(j,i,i+len)==len+1)
            && (hl(i+len+1,j,j+len)==len+1) && (sl(j+len+1,i,i+len)==len+1))
            {
                sum++;
            }
        }
    }
    return sum;
}
int main()
{
    int n,t,m,i,j,len,ans,num;
    scanf("%d",&t);
    while(t--)
    {
        ans = 0;
        scanf("%d",&n);
        give(n);
        scanf("%d",&num);
        for(i = 0;i < num;i++)
        {
            scanf("%d",&m);
            Remove(n,m);
        }
        for(len = 0;len < n;len++)
        {
            ans += count(len,n);
        }
        printf("%d\n",ans);
    }
	return 0;
}

到此这篇关于C语言打印正方形实例代码的文章就介绍到这了,更多相关C语言正方形内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用C语言如何实现一些简单图形的打印

    1#define_CRT_SECURE_NO_WARNINGS 1 因为笔者采用的是VS的编译环境所以有了上面的这一句话 我们都知道平面图形是由一条条线段构成,所以我们就先实现线段的打印 //打印自定义长度的线段 #include<stdio.h> int main() { int i = 0; int n; while (~scanf("%d", &n)) { for (i = 0; i < n; i++) printf("* "); p

  • C++实现二维图形的打印

    目录 一.下三角图形的打印 二.中三角二维图形的打印 三.上三角图形的打印 四.九九乘法表的打印 总结 今天,总结一下二维图形的打印问题,也是当时困扰我的一大难题哈哈哈哈,好在随着知识的沉淀,对这个知识点的理解也愈发清晰,今天就来举几个例子来探讨一下吧. 一.下三角图形的打印 #include<iostream> using namespace std; int main() { int i , j ; for(i = 1 ; i <= 3 ; i ++) { for (j = 1; j

  • C语言打印杨辉三角形的示例代码

    目录 1. 题目描述 2. 解题思路 3. 动图演示 4. 代码实现 Step1 Step2 居中显示 5. 完整代码 6. 特性总结 1. 题目描述 杨辉三角形 解题之前,我们先来了解一下杨辉三角形到底是什么? 杨辉三角形,又称帕斯卡三角形.贾宪三角形.海亚姆三角形,它的排列形如三角形. 因为首现于南宋杨辉的<详解九章算法>得名,而书中杨辉说明是引自贾宪的<释锁算书>,故又名贾宪三角形. 古代波斯数学家欧玛尔·海亚姆也描述过这个三角形.在欧洲,因为法国数学家布莱兹‧帕斯卡在165

  • C语言打印菱形实例详解

    前言 打印菱形这道题对于初学编程者来说简直是噩梦,曾经我就是栽在这上面的,后来编程编多了之后对打印菱形也觉得不再那么难了,去年在公众号写了一篇推送是关于打印菱形的,觉得对一些师弟师妹还是有所帮助的,今天就把这道题分享出来. 以下是我遇到的各种各样的菱形: 普通菱形,输入n,输出n行n列的菱形 难度系数:♥ n行空心菱形,输入n,输出n行空心菱形 难度系数:♥♥ n行挖空菱形,输入n,输出n行n列空格菱形 难度系数:♥♥♥ n行数字菱形,输入n,输入n行数字从外到内递增的数字菱形 难度系数:♥♥♥

  • C语言打印正方形实例代码

    目录 题目描述 输入 输出 样例输入 样例输出 题目描述 由火柴棍组成的一个n×n的正方形,按从上到下,从左到右的顺序给火柴棍编号,从1开始,比如下图中,一共有24根火柴棍. 问去掉若干个火柴棍之后,这个图形中还存在多少个正方形? 如下图所示,n=3时,去掉12,17,23号火柴棒之后,还剩下5个正方形. 输入 第一行是一个整数T(1≤T≤1000),表示样例的个数. 每个样例的第1行是两个整数n(1≤n≤50),表示图形的宽度. 样例的第2行首先是一个整数m(0≤m≤2n(n+1),表示去掉火

  • iReport生成pdf打印的实例代码

    先下载ireport版本 ,我下载的是 iReport-5.0.4  编辑模板  employees_identity_print_templet @RequestMapping("printEmpPdf") @ResponseBody public Result printEmpPdf(HttpServletRequest request,HttpServletResponse response, Parameter parameter){ Result result=Result.

  • js实现页面打印功能实例代码(附去页眉页脚功能代码)

    复制代码 代码如下: <html> <head></head> <style type="text/css" media="screen"> @media print{ .print {display:block;} .notPrint {display:none;} } </style> <script language="javascript"> function pre

  • C#中通过API实现的打印类 实例代码

    复制代码 代码如下: using System;using System.Collections;using System.Text;using System.Runtime.InteropServices; using System.Security; using System.ComponentModel; using System.Drawing.Printing; namespace PrinterAPI{ public class Printer  {   private Printe

  • C# 实现简单打印的实例代码

    主窗体代码如下: 复制代码 代码如下: public partial class PrintFileForm : Form    {        public PrintFileForm()        {            InitializeComponent();            PrintFile prinFile = new PrintFile();            prinFile.Print();        }    } 打印文件类如下: 复制代码 代码如下

  • C语言数据类型转换实例代码

    数据类型转换就是将数据(变量.表达式的结果)从一种类型转换到另一种类型.例如,为了保存小数你可以将int类型的变量转换为double类型. 数据类型转换的一般格式为: (type_name) expression type_name为要转换到的数据类型,expression为表达式.例如: (float) a; //把a转换为实型 (int)(x+y); //把x+y的结果转换为整型 (float) 100; //将一个常量转换为实型 [示例]将整数转换为浮点数: #include <stdio

  • java实现两个线程交替打印的实例代码

    使用ReentrantLock实现两个线程交替打印 实现字母在前数字在后 package com.study.pattern; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public c

  • 利用python/R语言绘制圣诞树实例代码

    目录 Python R语言 总结 圣诞节快到了,想着用python.r来画画圣诞树玩,就在网络上各种找方法,不喜勿喷哈~~ Python 1. import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turt

  • C语言中的socket编程实例代码

    前不久刚看完<c primer plus>,收获颇丰,对于C语言也有了更全面的认识,对于模块化和数据结构也有了更多的想法,之前学过C语言,但很多已经记不起了,知识很零散,这也是我看这本书的原因. 之后一段时间都会在进一步学习编程的同时研究socket通讯,目标是要将socket研究透,设计出自己的框架,以后从事服务器开发和构架应该也会大有裨益. 好了,废话不多说,奉上网上找的源码. /* window socket 服务端编程测试 */ #include <stdio.h> //用

随机推荐