using System;
namespace Csharp
{
class Quiz01_Array
{
struct Student
{
public string name;
public int kor;
public int eng;
public int math;
public int sum;
public double avg;
}
public static void Main(string[] args)
{
/*
요구사항] 1학년, 총3반, 학급당 5명
a. 이름, 국어, 영어, 수학 점수 입력
b. a를 통해서 각종 출력
출력]
1.성적표 출력(레이아웃)
2.총점, 평균(소수점1자리)
*/
// Student구조체 3x5의 2차원행열을 만듬
Student[,] S = new Student[3, 5];
// 1반부터 3반까지 5명씩 이름을 입력 받음
for (int i = 0; i < S.GetLength(0); i++)
{
for (int j = 0; j < S.GetLength(1); j++)
{
Console.Write("1학년 {0}반 {1}번 학생 이름 입력 : ", i + 1, j + 1);
S[i, j].name = Console.ReadLine();
}
Console.Clear();
}
// 랜덤클래스 변수 만들고
Random rnd = new Random();
for (int i = 0; i < S.GetLength(0); i++)
{
for (int j = 0; j < S.GetLength(1); j++)
{
// 한 사람당 3개의 점수를 난수를 이용하여 넣음
S[i, j].kor = rnd.Next(101);
S[i, j].eng = rnd.Next(101);
S[i, j].math = rnd.Next(101);
// 총점, 평균 구하기
S[i, j].sum = S[i, j].kor + S[i, j].eng + S[i, j].math;
S[i, j].avg = S[i, j].sum / 3.0D;
}
}
for (int i = 0; i < S.GetLength(0); i++)
{
Console.WriteLine("*************** 1학년 {0}반 성적표 ***************", i + 1);
Console.WriteLine(" [이름] [국어] [영어] [수학] [총점] [평균]");
for (int j = 0; j < S.GetLength(1); j++)
{
Console.WriteLine(" {0} {1,4} {2,4} {3,4} {4,4} {5:N1}", S[i, j].name, S[i, j].kor, S[i, j].eng, S[i, j].math, S[i, j].sum, S[i, j].avg);
}
Console.WriteLine("********************************************************");
Console.WriteLine();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
문제2.--------------------------------6조-----------------------
요구사항] 아래와 같이 출력하시오.
출력]
1
2 3 4
5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25
조건] 5x9 배열을 생성후 그안에 위와 같이 숫자를 대입 빈칸에 0은 없어야한다
*/
namespace practice_2_2012_2_17
{
class practice_2_2012_2_17
{
static void Main(string[] args)
{
int[,] ns = new int[5, 9];
int n = 1;
//for문 0~4까지의 행 담당
for (int i = 0; i < ns.GetLength(0); i++)
{
//for문 0~8까지의 열 담당
for (int j = 0; j < (i * 2) + 1; j++)
{
ns[i, j] = n;
Console.Write("{0,3}", ns[i, j]);
n++;
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
using System;
using System.Linq;
using System.Text;
namespace King
{
class Ace
{
public static void Main(string[] args)
{
/*--------------------------
문제3.
요구사항] 아래와 같이 출력하시오.
출력]
1 2 3 4 5
6 7 8 9
10 11 12
13 14
15
--------------------------*/
/*-----------------------
* index 2차원 배열 선언
* count 배열에 넣기 위한 수
* space 공백을 위해 선언
-----------------------*/
int[,] index = new int[5, 5];
int count = 1;
string space = " ";
/*--------------------------------------
* 배열에 값을 넣기 위해 포문선언
* 포문을 돌면서 배열에 값을 채워놓음
* count++ 값을 1씩 증가
--------------------------------------*/
for (int i = 0; i < index.GetLength(0); i++)
{
for (int j = 4; j >= i; j--)
{
index[i, j] = count;
count++;
}
}
/*----------------------------------------
* 배열에 값을 출력하기 위해 포문선언
* 포문을 돌면서 값을 출력 하고 엔터
* 포문을 돌면서 공백 삽입
----------------------------------------*/
for (int i = 0; i < index.GetLength(0); i++)
{
for (int j = 4; j >= i; j--)
{
Console.Write("{0,3}", index[i, j]);
}
//엔터
Console.WriteLine();
for (int k = 0; k < i + 1; k++)
{
Console.Write("{0,3}", space);
}
}
Console.WriteLine();
Console.ReadLine();
}
}
}
using System;
namespace Csharp
{
class Quiz02_Array
{
public static void Main(string[] args)
{
/*
요구사항] 아래와 같이 출력하시오.
조건] 6 x 5 배열
출력]
1 2 3 4 10
5 6 7 8 26
9 10 11 12 42
13 14 15 16 58
17 18 19 20 74
45 50 55 60 210
*/
Console.Write(" 2차원 행렬의 행 입력 : ");
int line = int.Parse(Console.ReadLine());
Console.Write(" 2차원 행렬의 열 입력 : ");
int row = int.Parse(Console.ReadLine());
Console.WriteLine();
// 2차원 배열 생성
int[,] array = new int[line, row];
// num(데이터값),sum(라인의합),totalSum(총합)
int num = 1, sum = 0, totalSum = 0;
// 배열에 데이터값 넣기
for (int i = 0; i < array.GetLength(0) - 1; i++)
{
for (int j = 0; j < array.GetLength(1) - 1; j++)
{
array[i, j] = num;
// 각 행의 데이터 합
sum += num;
// 행의 데이터 합을 마지막 행 인덱스에 대입
if (j + 1 == array.GetLength(1) - 1)
array[i, (j + 1)] = sum;
num++;
}
sum = 0;
}
for (int i = 0; i < array.GetLength(1) - 1; i++)
{
for (int j = 0; j < array.GetLength(0) - 1; j++)
{
// 각 열의 데이터 합
sum += array[j, i];
// 열의 데이터합을 마지막 열 인덱스에 대입
if (j + 1 == array.GetLength(0) - 1)
array[(j + 1), i] = sum;
}
// 마지막 열 데이터의 총합
totalSum += sum;
sum = 0;
}
// 행렬 마지막 인덱스에 총합을 대입
array[array.GetLength(0) - 1, array.GetLength(1) - 1] = totalSum;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
Console.Write("{0,4}", array[i, j]);
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleEx
{
//Array_5.cs
class Array_5
{
public static void Main(string[] args)
{
//재입력 응답값이 Y가 나오면 반복.
char loop = new char();
do
{
string inputs = "";
do
{
//입력한수x입력한수 배열
Console.Write("정사각형의 길이(1∼15) : ");
inputs = Console.ReadLine();
}
while (inputs == "" || int.Parse(inputs) > 15);
int input = int.Parse(inputs);
int[,] basedata = new int[input, input];
//입력 메서드 호출
TwistedData(basedata);
//출력
for (int i = 0; i < basedata.GetLength(0); i++)
{
for (int j = 0; j < basedata.GetLength(1); j++)
{
Console.Write("{0,5}", basedata[i, j]);
}
Console.WriteLine();
}
Console.Write("\r\n");
Console.Write("다시 입력하시겠습니까? (Y/N)");
string inputyn = Console.ReadLine();
//재입력값이 공백이 아니면서 1자리수일때만 char로 전환.
if (inputyn != "" && inputyn.Length == 1)
{
loop = char.Parse(inputyn);
}
}
while ((loop == 'Y' || loop == 'y'));
}
public static void TwistedData(int[,] basedata)
{
int rowcolSum = 0, halfSum = 0, n = 1, k = 0;
//최초 데이터의ㄱ모양의 가로, 세로길이는
//배열의 가로, 세로 길이와 같다.
rowcolSum = (basedata.GetLength(0) + basedata.GetLength(1));
halfSum = rowcolSum / 2;
//rowcolSum 변수가 2가 되는순간이 마지막에 데이터 하나짜리 칸을 채우는 순간.
//그때까지 ㄱ모양, ㄴ모양으로 데이터 입력한다.
while (rowcolSum >= 2)
{
//while반복문이 맨 처음 돌아갈때는 아래 문구를 뛰어넘는다.
if (rowcolSum != (basedata.GetLength(0) + basedata.GetLength(1)))
{
rowcolSum -= 2;
halfSum = rowcolSum / 2;
}
// ㄱ 모양으로 데이터를 넣어주는 for문
for (int i = 1; i < rowcolSum; i++)
{
if (i < halfSum)
{
basedata[k, i + (k - 1)] = n;
}
else
{
basedata[i - (halfSum - k), halfSum + (k - 1)] = n;
}
n++;
}
rowcolSum -= 2;
halfSum = rowcolSum / 2;
// ㄴ 모양으로 데이터를 넣어주는 for문
for (int i = rowcolSum - 1; i > 0; i--)
{
if (i >= halfSum)
{
basedata[halfSum + k, i - (halfSum - k)] = n;
}
else
{
basedata[i + k, halfSum - (halfSum - k)] = n;
}
n++;
}
k++;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HomeworkEx_06
{
// 문제6.(참고)
//요구사항] 배열을 1개 생성 후 출력
//제공]
//string[] member = new string[6]{"홍길동", "010-555-555","아무게","010-444-7777","하하하","010-777-8888"};
//출력]
// ++++ 연락처 ++++
// 1. 홍길동 [010-555-555]
// 2. 아무게 [010-444-7777]
// 3. 하하하 [010-777-8888]
class HomeworkEx06
{
public static void Main(string[] args)
{
//배열선언
string[] member = new string[6] { "홍길동", "010-555-5555", "아무게", "010-444-7777", "하하하", "010-777-8888" };
//member[0] = "홍길동";
//member[1] = "010-555-5555";
//member[2] = "아무게";
//member[3] = "010-444-7777";
//member[4] = "하하하";
//member[5] = "010-777-8888";
Console.WriteLine(" +++ 연 락 처 +++\r\n ");
for (int i = 0; i < member.Length; i += 2)
{
Console.WriteLine("{0}. {1} {2} ", i / 2 + 1, member[i], member[i + 1]);
//2. 방안~!
//for (int j = 0; j < 1; j++)
//{
// Console.Write("{0} ", member[i + 1]);
//}
//Console.WriteLine(" ");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleEx
{
class array7
{
public static void Main(string[] args)
{
GradePrint();
Console.ReadLine();
}
public static void GradePrint()
{
//******************** 1. 변수 초기화 부분 ****************
// 5개의 과목에 대한 이름을 담는 배열
string[] subName = new string[5];
// 5개의 과목에 대한 입력받은 점수를 담는 배열
int[] oriInputScore = new int[5];
// 원점수의 10으로 나눈 몫을 담을 변수; ex/몫이 0이면(0~9점이면 -> 별 0개 출력)
// 성적표에 *를 찍을시 담긴 몫은 -1씩 줄어 듦
int[] newInputScore = new int[5];
////최종 성적표 출력을 위한 10*5 배열
string[,] report = new string[10, 5];
//string blank = " ";// 성적표 2차원배열을 "공백"으로 초기화하기 위한 공백 변수
//5개의 과목에 대한 이름을 초기화
subName[0] = "국어";
subName[1] = "영어";
subName[2] = "수학";
subName[3] = "사회";
subName[4] = "국사";
// ************** 2. 해당과목의 점수를 입력 받음 ****************
//0부터 입력받은 5개의 과목 배열(oriInputScore.Length)길이 -1만큼 값을 입력받음
for (int i = 0; i < oriInputScore.Length; i++)
{
Console.Write("{0} 점수를 입력하세요 : ", subName[i]);
oriInputScore[i] = int.Parse(Console.ReadLine());
//각점수의 몫 구하기
//원점수의 보존을 위하여 새로운 배열에 나눈 몫을 복사
newInputScore[i] = oriInputScore[i] / 10;
}
// ************** 3. 요구사항 처리 부분 ****************
// 10*5 2차원 빈 배열에 위에서 구한 해당과목의 몫만큼 해당과목에 별의 갯수를 입력(단, 행의 Bottom부터 입력)
//i=행, j는열
// 별을 Bottom부터 찍어야 하기 때문에, 행은 역순으로 바꿈
for (int i = report.GetLength(0) - 1; i >= 0; i--)//9행,8행,7행,...1행,0행의 순서로..
{
for (int j = 0; j < report.GetLength(1); j++) //j열은 = 각 과목; 좌측->우측
{
if (newInputScore[j] != 0) //몫이 0이 아니면.
{
report[i, j] = "*";// 해당 배열의 위치에 별을 삽입
newInputScore[j] = newInputScore[j] - 1;//몫 - 1
}
else
{
report[i, j] = " ";//몫이 0이면 해당위이체 " " 빈공간 삽입
}
}
}
// ******************* 10*5 최종 성적표 출력 ******************
// GetLength(숫자)= 배열선언시 만들어진 배열의 길이(방 갯수)만큼
// i=행, j=열
for (int i = 0; i < report.GetLength(0); i++)
{
for (int j = 0; j < report.GetLength(1); j++)
{
Console.Write(" {0} ", report[i, j]);
}
//j가 돌때만 행을 바꾸면 모양까지도 5*5로 나온다
Console.WriteLine();
}
//성적표 하단의 과목명 출력
Console.WriteLine(" ========================");
Console.WriteLine(" {0} {1} {2} {3} {4} ", subName[0], subName[1], subName[2], subName[3], subName[4]);
}
}
}
//문제7.
//요구사항] 성적표 출력하시오.(한학생것만)
//입력] 국어, 영어, 수학, 사회, 국사(0 ~ 100사이)
//출력]
// *
// *
// *
// *
// *
// * *
// * * => 10 * 5 배열
// * * *
// * * * *
// * * * * *
// ========================
// 국어 영어 수학 사회 국사
//조건] 10*5 배열 char[,] string[,] 선택
//힌트> 10으로 나눈 몫에 대해서 별을 찍고
//나머지는 모두 공백으로 채워서 넣어라.
//국어는 0열 영어는1열 수학은2열 사회는3열 국사는4열, 즉 0,0
//출력은 2차원배열이므로 차례대로 출력...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
문제8.***
요구사항] 10개의 정수 난수 생성 후, 그안에서 가장큰수와 작은수를 찾아내라
출력]
임의의 숫자 : {1,5,7,43,7,8,4,7,98}
큰수 : 98
작은수 : 1
조건]
난수의 범위 : 1 ~ 99
중복값 허용
*/
namespace ConsoleEx
{
class quiz2_17_8
{
public static void Main(string[] args)
{
Random rnd = new Random();
int[] num = new int[10];
Console.Write("임의의 숫자 : {");
for (int i = 0; i < num.Length; i++)
{
num[i] = rnd.Next(1, 100);
Console.Write("{0}", num[i]);
if (i < num.Length - 1) Console.Write(", ");
}
Array.Sort(num);
Console.Write("}\r\n오름차순 정렬 : {");
for (int i = 0; i < num.Length; i++)
{
Console.Write("{0}", num[i]);
if (i < num.Length - 1) Console.Write(", ");
}
Console.WriteLine("}");
Console.WriteLine("큰수 : {0}", num[num.Length - 1]);
Console.WriteLine("작은수 : {0}", num[0]);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleEx
{
class array10
{
public static void Main(string[] args)
{
Lotto();
}
public static void Lotto()
{
Console.WriteLine("****로또 번호 추첨기****");
Console.Write("원하는 횟수 입력 : ");
int num = int.Parse(Console.ReadLine());
//배열선언-로또처럼 6개
int[] lottoNum = new int[6];
//난수를 만드는 객체생성
Random rnd = new Random();
//입력받은 횟수만큼 돌림
for (int k = 0; k < num; k++)
{
//만든 배열의 인덱스 마다 난수입력
for (int i = 0; i < lottoNum.Length; i++)
{
//45까지 숫자이므로
lottoNum[i] = rnd.Next(1, 46);
}
//한 횟수에 중복값이 나타나면 다시 난수를 입력하게
//i 가 1인 이유는 자기자신은 검사할필요 없기 때문
for (int i = 1; i < lottoNum.Length; i++)
{
Jloop: //라벨
//i가 움직인 만큼 j가 중복값을 확인하는 횟수
for (int j = 1; j < i + 1; j++)
{
//현재 i의 값과 그 전의 배열로 가서 그 값과 비교
//같으면 if문 실행
if (lottoNum[i] == lottoNum[i - j])
{
//다시 난수 입력
lottoNum[i] = rnd.Next(1, 46);
goto Jloop; //지정한 라벨로 이동
}
}
}
//********* 출력 부분 **********
for (int i = 0; i < lottoNum.Length; i++)
{
Console.Write("{0,3}", lottoNum[i]);
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
//문제10. **** 3조 ******
//요구사항] 로또 번호 추첨기(난이도 쉬움)
//입력] 원하는 횟수 입력 : 3
//출력]
// 3, 5, 1, 20, 4, 17
// 6, 18,25, 30, 21, 10
// .
// .
// .
//조건] 난수 1 ~45까지
// 중복값 허용안하게 출력; 중복값 나오면 다시 난수를 돌리도록 (foreach 문 이용하여 수를 검출 후 내부의 포문으로 기존 저장된 자료와 중복이 되는지 기존 비교후 저장)
// 하나의 횟수안에서만 중복이 업으면 된다.
/*
//System.Array 클래스를 상속받는다.
Random rnd = new Random();
int[] ns = new int[15];
//배열에 임의에 값 삽입
for (int i=0; i<ns.Length; i++)
{
ns[i] = rnd.Next(1,101);//1~100
}
//배열의 내용값 확인
CheckValue(ns);
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleEx
{
//Array_11.cs
class Array_11
{
public static void Main(string[] args)
{
//재입력 응답값이 Y가 나오면 반복.
char loop = new char();
do
{
string input = "";
//1억 미만을 입력받을때까지 반복.
do
{
Console.Write("1억 미만의 금액을 입력하세요 : ");
input = Console.ReadLine();
}
while (input == "" || decimal.Parse(input) > 100000000);
//1억 미만 입력받으면, 요소가 자릿수만큼 할당된 배열에 넣는다.
//그 역할을 하는 메서드는 DataInput
Console.Write("\r\n\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n");
Console.WriteLine("\t입력하신 {0:C0} 은", decimal.Parse(input));
Console.WriteLine("\t일금 [ {0}] 입니다.", DataInput(input, input.Length));
Console.Write("\t++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n");
Console.Write("\r\n");
Console.Write("다시 입력하시겠습니까? (Y/N)");
string inputyn = Console.ReadLine();
//재입력값이 공백이 아니면서 1자리수일때만 char로 전환.
if (inputyn != "" && inputyn.Length == 1)
{
loop = char.Parse(inputyn);
}
}
while ((loop == 'Y' || loop == 'y'));
}
//데이터를 읽어서 배열형태로 입력하는 메서드
public static string DataInput(string numbers, int length)
{
int inputNum = int.Parse(numbers);
string result = "";
//배열요소당 0~9의 값이 들어가므로 byte형 배열 선언.
byte[] arrNum = new byte[length];
//10제곱을 8번만 해도 1,000,000,000 이 되므로, long형 선언.
long jegop = 10;
//입력받은 숫자를 단위별로 끊어서 arrNum 배열에 순서대로 넣는다.
// ex) 21500
//arrNum[0] = 0, arrNum[1]=0, arrNum[2]=5, arrNum[3]=1, arrNum[3]=2
for (int i = 0; i < length; i++)
{
if (i == 0)
{
//arrNum[0] = 21500 % 10
arrNum[i] = (byte)(inputNum % jegop);
}
else
{
//두자릿수 이상 계산부터 10을 제곱시킨다.
//arrNum[1] = 21500 % 100 / 10
//arrNum[2] = 21500 % 1000 / 100
jegop *= 10;
arrNum[i] = (byte)(inputNum % jegop / (jegop / 10));
}
}
//숫자를 읽을때 높은단위부터 읽기시작한다.
// 21,500 이만 일천 오백원.
//때문에 높은단위부터 Data를 읽어들인다.
for (int i = length - 1; i >= 0; i--)
{
result += DataReading(arrNum[i], i);
}
return result;
}
//배열데이터를 읽어서 한글로 표기하는 메서드
public static string DataReading(byte input, int inputDan)
{
//숫자 한글 표기법 배열
string[] wons = new string[10]
{"","일","이","삼","사","오","육","칠","팔","구"};
//단위 한글 표기법 배열
//,"억","십","백","천","조","십","백","천"};
string[] wons2 = new string[8]
{"원","십","백","천","만","십","백","천"};
string result = "";
//자리수의 0~9사이 입력값을 "일~구" 한글로
//0은 빈값이 결과에 누적된다.
result += wons[input];
//0을 입력받으면 단위표기하지 않는다.
//단, 단위표기는 만원단위, 원단위는 표기한다.
if (input != 0 || inputDan == 4 || inputDan == 0)
{
//입력값이 0이고 10의자리수 이상일때는 공백 없이
//(만단위 이하 전부 0일때 "만 원" 이 아닌 "만원" 출력
if (input == 0 && inputDan > 0)
result += wons2[inputDan];
else
result += wons2[inputDan] + " ";
}
return result;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
문제12.***
요구사항] 5x5 마방진을 생성하시오.
*/
namespace ConsoleEx
{
class quiz2_17_12
{
public static void Main(string[] args)
{
int[,] mabangjin = new int[5, 5];
int i = 0, j = 2;
for (int n = 1; n <= 25; n++)
{
mabangjin[i, j] = n;
i--;
j++;
if (i == -1) i = 4;
if (j == 5) j = 0;
if (mabangjin[i, j] != 0)
{
i++; j--;
if (i == 5) i = 0;
if (j == -1) j = 4;
i++;
}
}
for (i = 0; i < mabangjin.GetLength(0); i++)
{
for (j = 0; j < mabangjin.GetLength(1); j++)
Console.Write("{0,3}", mabangjin[i, j]);
Console.WriteLine();
}
}
}
}