Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

[Event Code siêu Quà khủng] Hình vuông trong hình tròn của hình vuông (há há)

10:02 12-04-2017 819 lượt xem 5 bình luận

Yêu cầu [Ngôn ngữ bất chấp tất cả]:

Input: chỉ số N 

- N tương ứng với kích thước của hình vuông NxN.

- Sẽ là kết hợp từ nhiều hình vuông nhỏ với kích thước 1x1

Output: Số lượng hình vuông hoàn chỉnh bên trong hình tròn tâm là (N/2, N/2) bán đường kính N-1

Ví dụ như hình

https://drive.google.com/open?id=0ByMJQK_piCYibzNweDlwbEI4Wkk

Với N = 4

thì output sẽ là 4

-------------------------------------------------------------------------------------------------------------------------------------

Event hôm nay sẽ kết thúc vào 20h ngày 13/04/2017

Chỉ chấp nhận câu trả lời là code được dán và phần bình luận.

Code phải chạy tốt trên trình biên dịch online như http://ideone.com/

Câu trả lời chính xác và sớm nhất sẽ giành được một phần quà là khóa học online tính phí tùy chọn trong danh sách sẽ được đưa ra.

Kteam sẽ liên hệ với người chiến thắng để trao giải và công bố public tại phần bình luận của event và trong fanpage www.facebook.com/howkteam

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
minhtuancnttk39 đã bình luận 06:23 14-04-2017
/*
- Nhìn vào hình chúng ta sẽ dễ dàng nhận thấy chỉ cần tính được số lượng ôvu ông của 1/4 hình tròn. 
Suy ra sẽ tính được số lượng ô vuông nằm trong cả hình tròn.-
Đường kính: d
- Bán kính: r Ta dễ dàng tính được r = (n - 1) / 2. 
Tiếp theo, ta sẽ để ý thấy là chỉ cần duyệt lần lượttừ  1 -> r sẽ thu được từng “cột" ô vuông có cả ô vuông thừa theo i : 1 -> r.Tại
i = A như hình vẽ, ta sẽ thu được cạnh AX từ công thức pytago của tam giác vuôngOAX.1
Tại i = B, ta sẽ thu được cạnh BY từ công thức pytago của tam giác vuông OBY
Nhưng ta chỉ lấy phần ô vuông nằm trong hình tròn. 
Có nghĩa là ta chỉ lấy phần nguyêncủa cạnh AX và phần nguyên của cạnh AX (chính là cạnh AX’) 
cũng chính là số lượnghình vuông thuộc đường tròn bán kính r tại i = A, và 
cứ như thế cho cho i = B.... đếnr ta sẽ thu được tổng hình vuông của 1/4 hình tròn.-
Sau đó công việc đơn giản của ta là lấy tổng số hình vuông vừa thu được nhân với 4sẽ thu được kết quả cuối cùng của bài toán.
*/
 
 
#include <bits/stdc++.h>
 
using namespace std;
 
#define FOR(i,a,b) for (int i = a; i <= b; i++)
#define FORD(i,a,b) for (int i = b; i >= b; i--)
#define REP(i,a) for (int i = 0; i < a; i++)
#define REPD(i,a) for (int i = a; i > 0; i--)
 
#define ll long long
#define fi first
#define se second
 
typedef pair<int, int> pii;
typedef pair< ll, ll > pll;
 
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3fLL
 
#define debug(x) { cout << "---> " << #x << " = " << x << endl;  }
#define sqr(x) ((x)*(x))
#define all(x) x.begin(), x.end()
 
int test, n;
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> test;
    while(test--) {
        cin >> n;
        double r = (n - 1) / 2.0;
        int a = (int)r, d, ans = 0;
        double dis;
        FOR(i,1,a) {
            dis = sqrt(sqr(r) - sqr(i));
            d = (int)dis;
            ans += d;
        }
        cout << ans * 4 << endl;
    }
}

 

Nguyễn Hà Chung đã bình luận 09:58 13-04-2017
#include <iostream>
#include <math.h>
using namespace std;
 
int main() {
	int n;
	int s=0;
	cout << "Nhap n = ";
	cin >> n;
	if(n%2==0)
	{
	     if (n==0)
         { cout<<"So luong hinh vuong hoan chinh ben trong hinh tron la:";
          cout<<0;
            return 0;
         }
 
	int m=(n-1)/2;
	float l=(float)(n-1)/2;
 
	for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
       {
          if(sqrt((m-j)*(m-j)+(1+i)*(1+i))<l)
        s=s+1;
       }
 
    }
     cout<<"So luong hinh vuong hoan chinh ben trong hinh tron la:";
    cout<<s*4;
	}
    else
      {
          if (n==1)
         { cout<<"So luong hinh vuong hoan chinh ben trong hinh tron la:";
          cout<<0;
            return 0;
         }
 
	int m=(n-1)/2-0.5;
	s=s+m*4+1;
	float l=(float)(n-1)/2;
 
	for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
           if(sqrt((m-j+0.5)*(m-j+0.5)+(1+i+0.5)*(1+i+0.5))<l)
        s=s+1*4;
        }
    }
    cout<<"So luong hinh vuong hoan chinh ben trong hinh tron la:";
    cout<<s;
      }
 
    return 0;
 
}

 

nhokconlontontm đã bình luận 23:22 12-04-2017

/* package whatever; // don't place package name! */
 
import java.util.*;
import java.lang.*;
import java.io.*;
 
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
 public static void main(String[] args) {
 
        for (int i = 3; i < 100; i++) {
            System.out.println("N = " + i + " => Output: " + calc(i));
        }
 
    }
 
    public static int calc(int n) {
        //result
        int output = 0;
 
        //calculate
        if (n > 3) {
            //su dung bien tam thay cho n
            int temp = n;
 
            //n la so le thi giam temp 1
            if (n % 2 == 1) {
                temp--;
            }
 
            int main = ((temp - 1) / 2 - 1) * 2;
            double bonus = ((double) temp - 1) / 2 / Math.sqrt(2);
 
            //1/4 result
            output = (int) (main + bonus) * 4;
 
            //n la so le thi output tang them 1
            if (n % 2 == 1) {
                output += 1;
            }
        }
 
        return output;
    }
}

Hoàng Anh đã bình luận 18:32 12-04-2017
using System;
					
public class Program
{
	static double distance(double h,double w)
	{
		return Math.Sqrt(h*h+w*w);	
	}
	
	static long Calc(long n)
	{
		if(n<=2) return 0;
		float radius=(n-1)/2f;
		long square=Convert.ToInt32(Math.Floor(radius));
		long sum=0;
		if(n%2==0){
			for (long i=1;i<=square;i++)
			{
				for(long y=square;y>0;y--)
				{
					double dis=distance(i,y);
					if(distance(i,y)<=radius)
					{
						sum+=y;
						break;
					}
				}
			}
			sum*=4;
		}else
		{
			for (int i=2;i<=square;i++)
			{
				for(long y=square;y>1;y--)
				{
					double dis=distance(i,y);
					if(distance(i-0.5,y-0.5)<=radius)
					{
						sum+=y-1;
						break;
					}
				}
			}
			sum=sum*4+(1+(square-1)*4);
		}
		return sum;
		
	}
	
	public static void Main()
	{
		long n=long.Parse(Console.ReadLine());
		Console.WriteLine(Calc(n));
		
	}
}

 

Nah đã bình luận 18:28 12-04-2017
import java.util.Scanner;

public class SquaresInCircle {
    private int n;

    public SquaresInCircle(int n) {
        this.n = n;
    }

    public int numberOfSquares() {
        for (int i = 1; i < n; i++) {
            if ((Math.sqrt(2) * i) >= (n - 1) / (double)2) {
                return (i - 1) * 4;
            }
        }
        return 0;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        SquaresInCircle s = new SquaresInCircle(in.nextInt());
        System.out.println(s.numberOfSquares());
    }
}

 

Câu hỏi mới nhất