Hỏi đáp

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

[Event Code siêu Quà khủng] - Chọn món

8 năm trước 1.360 lượt xem 11 bình luận

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

Mình là một người thích ăn uống. Nhưng lại rất mệt mỏi mỗi khi phải lựa chọn ăn món gì mỗi lần đi ăn.

Mình thích nhất các món ngon sau đó là chi phí và cuối cùng là tốc độ làm ra món đó.

Các bạn hãy giúp mình làm một ứng dụng chọn món với mong muốn như sau:

- Có một file dữ liệu có cấu trúc như sau:

+ dòng đầu tiên chứa giá trị n tương ứng với n món ăn

+ n dòng tiếp theo là thông tin món ăn có cấu trúc: <Tên món>_<Chỉ số ngon>_<Giá thành>_<Thời gian làm>

  1. Trong đó chỉ số ngon tính theo thang 100. 
  2. Thời gian làm tính theo phút

Ví dụ :

 

Chương trình có khả năng tự đọc file dữ liệu khi khởi chạy.

Cho phép mình nhập vào tuần tự 3 giá trị ngưỡng của món ăn mong muốn.

Output:

- Xuất ra tên các món có tổng thỏa mãn ngưỡng giá thành và thời gian. Tất cả đều phải có ngưỡng ngon cao hơn ngưỡng mong đợi.

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

Event hôm nay sẽ kết thúc vào 8h ngày 12/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
PrInc3 đã bình luận 8 năm trước

Hết thời hạn nộp rồi nhưng mong admin sẽ chấm, nếu em sai thì cho em xin giải thuật bài này ạ.
Bài này em thấy 1 số bác trên làm kiểu đơn giản quá, toàn so sánh lớn hơn bằng thì xuất. Nhưng theo em hiểu đề bài thì chỉ yêu cầu ngưỡng ngon lớn hơn ngưỡng ngon nhập vào, còn thời gian và giá cả chỉ cần làm sao cho tối ưu hóa nhất (có thể vượt/nhỏ hơn ngưỡng nhập vào). 

Trong code, để mở mất thời gian em không viết code đọc file mà tạo sẵn bộ dữ liệu, admin muốn thử bộ dữ liệu khác thì chỉ cần sửa ở phần khai báo (số 6), còn nếu muốn bộ dữ liệu lớn hơn thì sửa số phần tử cuối cùng của mảng lại rồi nhập tay vô thêm, và sửa tất cả số 6 trong code thành số mà admin vừa sửa ban đầu). À lưu ý chỗ foodTime[i] div 60 không sửa nha!^^

Mong admin ráng chịu khó chấm và hồi đáp em. Chạy tốt trên Ideone.
Klq: nhưng admin kì thị pascal à? :v Đống này 2 tiếng đó :D

Program PrInc3;
{ Const DELICIOUS_PIO = 6; COST_PIO = 2; TIME_PIO = 1; }
Type TEMP = record
		value:longint;
		tag:integer;
	end;
	TEMPUI = Array[1..6] of TEMP;
Var foodName: Array[1..6] of string = ( 'mon1','mon2','mon3','mon4','mon5','mon6');
		foodCost: Array [1..6] of longint = (60000,65000,40000,10000,20000,80000);
		foodDelicious: Array[1..6] of integer = (96,109,69,19,29,139);
		foodTime:Array[1..6] of integer = (696,969,666,100,235,1000);
		foodPiority: Array[1..6] of integer;
		piority: Array[1..6] of integer;
		t: Array[1..6] of TEMP;
		inputCost:longint; inputDelicious,inputTime,max: integer;
		i,j:byte; min:integer; tem:longint;tem2:string;
BEGIN
write('Nhap nguong gia: ');readln(inputCost);
write('Nhap nguong ngon: ');readln(inputDelicious);
write('Nhap nguong thoi gian lam: ');readln(inputTime);
for i:=1 to 6 do begin
 t[i].value := foodDelicious[i] - inputDelicious;
 t[i].tag := i;
 end;
 {//Sort
for i:=1 to 5 do
    for j:=i+1 to 6 do
		if (t[i].value >t[j].value) then
		begin
			tem := t[j].value;
			t[j].value := t[i].value;
			t[i].value := tem;
			tem := t[j].tag;
			t[j].tag := t[i].tag;
			t[i].tag := tem;
		end;}
for i:=6 downto 1 do foodPiority[i] := t[i].value*2;

for i:=1 to 6 do begin
 t[i].value := foodCost[i] - inputCost;
 t[i].value := t[i].value div 1000;
 t[i].tag := i;
 end;
{ //Sort
for i:=1 to 5 do
    for j:=i+1 to 6 do
		if (t[i].value >t[j].value) then
		begin
			tem := t[j].value;
			t[j].value := t[i].value;
			t[i].value := tem;
			tem := t[j].tag;
			t[j].tag := t[i].tag;
			t[i].tag := tem;
		end}
for i:=6 downto 1 do foodPiority[i] := foodPiority[i] - ((foodDelicious[i] div foodCost[i])*3) - (t[i].value)*4;
for i:=1 to 6 do begin
 t[i].value := foodTime[i] - inputTime;
 t[i].value := t[i].value div 60;
 t[i].tag := i;
 end;
 {//Sort
for i:=1 to 5 do
    for j:=i+1 to 6 do
		if (t[i].value >t[j].value) then
		begin
			tem := t[j].value;
			t[j].value := t[i].value;
			t[i].value := tem;
			tem := t[j].tag;
			t[j].tag := t[i].tag;
			t[i].tag := tem;
		end;}
for i:=6 downto 1 do foodPiority[t[i].tag] := foodPiority[i] - t[i].value;
writeln('**DO UU TIEN TUNG MON SAU GIAI THUAT**');
for i:=1 to 6 do
	writeln('- ',foodName[i],': ',foodPiority[i]);
	writeln('**KET QUA**');
//Sort
max:=6;
for i:=1 to max-1 do
    for j:=i+1 to max do
		if (foodPiority[i]< foodPiority[j]) then
		begin
			tem := foodPiority[j];
			foodPiority[j] := foodPiority[i];
			foodPiority[i] := tem;
			tem := foodDelicious[j];
			foodDelicious[j] := foodDelicious[i];
			foodDelicious[i] := tem;
			tem2 := foodName[j];
			foodName[j] := foodName[i];
			foodName[i] := tem2;
		end;
max := 1;
writeln('Cac mon phu hop voi nhu cau cua ban: ');
for i:=1 to 6 do begin 
	if (foodDelicious[i]>inputDelicious) then  begin 
		writeln('- ',foodName[i]); max:=i;
		break;
	end;
end;
for i:=max+1 to 6 do if foodPiority[i] = foodPiority[max] then writeln('- ',foodName[i]);
readln;
END.

 

nam27512345678 đã bình luận 8 năm trước

program BuiHoaiAnh;
uses crt;
var s,x,Z:string;
n,i,j,l,ngon,gia,time:longint;
A:array[1..3] of longint;


f:text;
begin
clrscr;
assign(f,'macro.inp');
reset(f);
readln(f,n);
writeln('Nhap Do Ngon Ma Ban Mong Muon');
readln(Ngon);
writeln('Nhap Gia Tien Ma Ban Nghi Phu Hop');
readln(Gia);
writeln('Nhap Thoi Gian Toi Da Ma Ban Co The O Lai Voi Nha Hang');
readln(time);

j:=1;
l:=0;

while not eof(f) do
begin
readln(f,s);
S:=S+'_';
for i:=j to length(s) do
begin

if S[i] ='_' then
        for j:=i+1 to length(s) do
        begin

        if S[j]='_' then
        begin
        inc(l);
        val(x,A[l]);

        x:='';
        BREAK;
        end
        ELSE
        X:=X+S[J];


        end;
        end;
delete(s,length(s),1);
if (A[1] > ngon)  and (A[2] <= gia) and (A[3] <=time) then
writeln(s);
A[1]:=0;
A[2]:=0;
A[3]:=0;
l:=0;
j:=1;
x:='';
s:='';

        END;


close(f);
readln
END.
 

Nah đã bình luận 8 năm trước
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class ChonMon {
    private class MonAn {
        private String ten;
        private int chiSo;
        private long gia;
        private int thoiGian;

        public MonAn(String ten, int chiSo, long gia, int thoiGian) {
            this.ten = ten;
            this.chiSo = chiSo;
            this.gia = gia;
            this.thoiGian = thoiGian;
        }

        public String getTen() {
            return ten;
        }

        public int  getChiSo() {
            return chiSo;
        }

        public long getGia() {
            return gia;
        }

        public int getThoiGian() {
            return thoiGian;
        }

        @Override
        public String toString() {
            return ten + "_" + chiSo + "_" + gia + "_" + thoiGian;
        }
    }

    private ArrayList<MonAn> listMonAn;
    private int soMonAn;

    public ChonMon() {
        listMonAn = new ArrayList<>();
        try {
            FileReader fr = new FileReader("listmonan.txt");
            BufferedReader br = new BufferedReader(fr);
            String str = null;
            while ((str = br.readLine()) != null) {
                if(str.isEmpty()) {
                    continue;
                }
                String[] strings = str.split("_");
                if(strings.length == 1) {
                    soMonAn = Integer.parseInt(str);
                } else {
                    listMonAn.add(new MonAn(strings[0], Integer.parseInt(strings[1]), Long.parseLong(strings[2]), Integer.parseInt(strings[3])));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void chonMon(int chiSo, long gia, int thoiGian) {
        for(int i = 0; i < listMonAn.size(); i++) {
            if(listMonAn.get(i).getChiSo() >= chiSo) {
                continue;
            } else if(listMonAn.get(i).getGia() >= gia) {
                continue;
            } else if(listMonAn.get(i).getThoiGian() >= thoiGian) {
                continue;
            } else {
                System.out.println(listMonAn.get(i).getTen());
            }
        }
    }

    public void print() {
        System.out.println(soMonAn);
        for(int i = 0; i < listMonAn.size(); i++) {
            System.out.println(listMonAn.get(i));
        }
    }

    public static void main(String[] args) {
        ChonMon cm = new ChonMon();
        cm.print();
        cm.chonMon(80, 75000L, 30);
    }
}
Ngọc Anh đã bình luận 8 năm trước
#include <iostream>
#include <iomanip>

#define MAX 100

using namespace std;

typedef struct MonAn{
	char TenMonAn[100];
	unsigned ChiSo;
	unsigned long GiaThanh;
	unsigned ThoiGian;
}MA;
void DocFile(MA a[], int &n){
	FILE *file;
	if (fopen_s(&file, "menu.dat", "rb") == 0){
		fread(&n, 4, 1, file);
		for (int i = 0; i < n; i++){
			fread(a[i].TenMonAn, sizeof(a[i].TenMonAn), 1, file);
			fread(&a[i].ChiSo, sizeof(a[i].ChiSo), 2, file);
			fread(&a[i].GiaThanh, sizeof(a[i].GiaThanh), 4, file);
			fread(&a[i].ThoiGian, sizeof(a[i].ThoiGian), 2, file);
		}
	}
	else
	{
		return;
	}
	fclose(file);
}
void GhiFile(MA a[], int &n){
	FILE *file;
	if (fopen_s(&file, "menu.dat", "wb") == 0){
		fwrite(&n, 4, 1, file);
		for (int i = 0; i < n; i++){
			fwrite(a[i].TenMonAn, sizeof(a[i].TenMonAn), 1, file);
			fwrite(&a[i].ChiSo, sizeof(a[i].ChiSo), 2, file);
			fwrite(&a[i].GiaThanh, sizeof(a[i].GiaThanh), 4, file);
			fwrite(&a[i].ThoiGian, sizeof(a[i].ThoiGian), 2, file);
		}
	}
	fclose(file);
}
void NhapMA(MA a[], int &n){
	cout << "\nNhap vao so luong mon an: "; cin >> n;
	for (int i = 0; i < n; i++){
		cout << "\n-----------------------------------------------------";
		fflush(stdin);
		cout << "\nNhap Ten Mon An: "; gets_s(a[i].TenMonAn);
		cout << "\nNhap Chi So Ngon: "; cin >> a[i].ChiSo;
		cout << "\nNhap Gia Mon An: "; cin >> a[i].GiaThanh;
		cout << "\nNhap Thoi Gian Nau: "; cin >> a[i].ThoiGian;
	}
}
void XuatMenu(MA a[], int n){

	int dem = 0;
	for (int i = 0; i < n; i++){
		if (dem == 0){
			cout << "\n-----------------------------------------------------\n";
			cout << setw(30) << "Ten Mon An" << setw(20) << "Chi So Ngon" << setw(20) << "Gia Mon An" << setw(20) << "Thoi Gian Nau" << "\n";
		}
		cout << setw(30) << a[i].TenMonAn;
		cout << setw(20) << a[i].ChiSo;
		cout << setw(20) << a[i].GiaThanh;
		cout << setw(20) << a[i].ThoiGian;
		cout << "\n";
		dem++;
	}
}
void AddMonAn(MA a[], int &n){
	int m;
	cout << "\nNhap so luong mon an muon them vao menu: "; cin >> m;
	for (int i = n; i < m + n; i++){
		cout << "\n-----------------------------------------------------";
		fflush(stdin);
		cout << "\nNhap Ten Mon An: "; gets_s(a[i].TenMonAn);
		cout << "\nNhap Chi So Ngon: "; cin >> a[i].ChiSo;
		cout << "\nNhap Gia Mon An: "; cin >> a[i].GiaThanh;
		cout << "\nNhap Thoi Gian Nau: "; cin >> a[i].ThoiGian;
	}
	n += m;
}
void HoanVi(MA &a, MA &b){
	MA temp = a;
	a = b;
	b = temp;
}
void DieuKien(MA a[], int n){
	MA b[MAX];
	unsigned CSN;
	unsigned long GT;
	unsigned TG;
	int dem = 0;
	cout << "\nNhap vao cac dieu kien ban muon";
	cout << "\nChi so ngon ban muon ? : "; cin >> CSN;
	cout << "\nGia thanh ban muon ? : "; cin >> GT;
	cout << "\nThoi gian lam ban muon ? : "; cin >> TG;
	for (int i = 0; i < n; i++){
		if (a[i].ChiSo >= CSN){
			b[dem] = a[i];
			dem++;
		}
	}
	for (int i = 0; i < dem - 1; i++){
		if (b[i].GiaThanh > b[i + 1].GiaThanh){
			HoanVi(b[i], b[i + 1]);
		}
	}
	unsigned long Tong = 0;
	int i = 0;
	while (Tong <= GT)
	{
		Tong += b[i].GiaThanh;
		i++;
	}
	for (int x = 0; x < i - 1; x++){
		if (b[x].ThoiGian > b[x + 1].ThoiGian){
			HoanVi(b[x], b[x + 1]);
		}
	}
	unsigned Tong2 = 0;
	int k = 0;
	while (Tong2 <= TG)
	{
		Tong2 += b[k].ThoiGian;
		k++;
	}
	cout << "\nCac mon ban co the chon la:";
	XuatMenu(b, k-1);
}
void main(){
	MA a[MAX];
	int n = -1, cv;
	DocFile(a, n);
	if (n == -1){
		cout << "\nDanh sach menu mon an hien dang rong ban vui long nhap cac mon an vao menu";
		NhapMA(a, n);
		GhiFile(a, n);
	}
a:do{
	cout << "\n============= MENU LUA CHON CONG VIEC =============";
	cout << "\n0. Thoat chuong trinh";
	cout << "\n1. Them mon an vao menu thuc don";
	cout << "\n2. Chon mon an voi cac dieu kien ma ban dat ra";
	cout << "\n3. Xuat ra danh sach menu thuc don";
	cout << "\nChon cong viec ban muon lam: "; cin >> cv;
	system("cls");
	switch (cv)
	{
	case 0:
		exit(0);
		break;
	case 1:
		AddMonAn(a, n);
		GhiFile(a, n);
		break;
	case 2:
		DocFile(a, n);
		DieuKien(a, n);
		break;
	case 3:
		DocFile(a, n);
		XuatMenu(a, n);

		break;
	default:
		goto a;
		break;
	}
} while (cv != 0);
  cout << endl;
  system("pause");
}

 

bopokemon đã bình luận 8 năm trước

static void Main(string[] args)
        {
            string fileName = @"chomon.txt";
            Console.WriteLine("Nhập vào 3 tiêu chí món ăn");
            Console.Write("Tiêu chí ngon: ");
            int ngon = int.Parse(Console.ReadLine());
            Console.Write("Tiêu chí tien: ");
            int tien = int.Parse(Console.ReadLine());
            Console.Write("Tiêu chí thời gian (phút): ");
            int time= int.Parse(Console.ReadLine());
            int ngon1 = 0;
            int tien1 = 0;
            int time1 = 0;
            if (File.Exists(fileName))
            {
                StreamReader sr = new StreamReader(fileName);
                string line = string.Empty;
                while (sr.ReadLine() != null)
                {
                    line = sr.ReadLine();
                    if (line.Trim() != string.Empty)
                    {
                        ngon1 = int.Parse(line.Split('_')[1]);
                        tien1 = int.Parse(line.Split('_')[2]);
                        time1 = int.Parse(line.Split('_')[3]);
                        if (ngon1 > ngon && tien1 <= tien && time1 <= time)
                        {
                            Console.WriteLine(line);
                        }
                    }
                }
                Console.ReadKey();
            }
            else
            {
                Console.WriteLine("File does not exists");
            }
        }

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