Mật mã quy tắc số

Cả nhà sửa giúp e bài này với ạ.

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a[226];
	int n, i;
	cin >> n;
	for(i=1;i<=n;i++)
	{
		cin >> a[i];
	}
	for(i=1;i<=n;i++)
	{
		a[i]+=96;
		cout << a[i];
		if(a[i]==27) cout << " ";
	}
	return 0;
}

Sai rồi nhé!
Chuỗi chưa giải mã là ở dạng số. Bạn dùng mảng char lưu là tèo luôn.

À mà, chỉ số của mảng bắt đầu từ 1 à? Mình cứ tưởng là từ 0 chứ!

3 Likes

Để ý là kí tự ứng 1-1 với nhau nhưng lại in ra 2 kí tự đó.

4 Likes

a[i] += 96 rồi thì đâu còn cái nào là 27 nữa. :smile:

Cái if cho lên đầu, và thực hiện xong thì continue luôn cho đỡ phải xuống += 96. :slight_smile:

Mà bạn nên cho index chạy từ 0 nha. :wink:

2 Likes

Các giá trị khi nhận:

19
18 5 22 5 18 19 5 27 20 8 5 27 3 9 16 8 5 18 19

Nếu là mảng char:

n = 19
a[0] = '1'
a[1] = '8'
a[2] = ' '
a[3] = '5'
a[4] = ' '
...
a[16] = '5'
a[17] = ' '
a[18] = '2'

Nếu là mảng int:

n = 19
a[0] = 18
a[1] = 5
a[2] = 22
a[3] = 5
a[4] = 18
...
a[16] = 5
a[17] = 18
a[18] = 19

Khác nhau nhỉ!?

Mình có 2 hướng giải:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
	// Dùng cho cách 1
	string m = "abcdefghijklmnopqrstuvwxyz ";
  
	int a[225]; // int
	int n, i;
	cin >> n;
	for(i=0;i<n;i++)
	{
		cin >> a[i];
	}
	for(i=0;i<n;i++)
	{
		// Cách 1
		cout << m[a[i]-1];
		
		// Cách 2
		//cout << (char)(a[i] != 27 ? a[i] + 96 : ' ');
	}
	return 0;
}

Kết quả: https://ideone.com/QOiocw

Nếu cincout riêng biệt, có thể kết hợp xuất luôn trong vòng lặp nhập. Trên màn hình Console nhìn rối lắm.

5 Likes

Oops :sweat_smile:

--- OP/92099.cpp
+++ me/92099.cpp

@@ -14,6 +14,5 @@
	for(i=1;i<=n;i++)
	{
-		a[i]+=96;
-		cout << a[i];
		if(a[i]==27) cout << " ";
+               else cout << (char)(a[i] += 96);
	}
3 Likes

:zebra:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    transform(istream_iterator<int>(cin), istream_iterator<int>(),
              ostream_iterator<char>(cout),
              [](int n) { return n == 27 ? ' ' : char(n - 1 + 'a'); });
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?