[تحدي] الترقيم بوساطة الحروف
السلام عليكم ورحمة الله وبركاته،
هذا تحدٍ برمجي يهدف إلى تنشيط التفكير، فمع كثرة حلك للمشاكل باستخدام البرمجة تزداد خبرتك.
كيف أشارك؟
- يمكنك المشاركة بأي لغة برمجة تتقنها
- لا داعي لوجود واجهة رسومية، استقبل المدخلات عن طريق std input
- اطرح الكود كإجابة على هذا السؤال واستخدم أدوات المحرر في عالم البرمجة لادخال الكود بشكل منظم.
السؤال:
اكتب برنامجا يستقبل عددا صحيحا integer ثم يطبع النتيجة على شكل أحرف كما في ترقيم الأعمدة في برنامج Excel، مثال:
1 ==> A
2==> B
وعند الوصول إلى Z سيتابع البرنامج على النمط الآتي:
AA
AB
AC
وهكذا.
وإليك بعض المدخلات للتجربة عليها:
input | output |
---|---|
27 | AA |
703 | AAA |
332 | LT |
* توضيح للنتيجة الأولى:
تم ادخال 27 إلى البرنامج، ويجب أن يطبع البرنامج "AA" ، فعندما يبدأ الترقيم في الأحرف من الرقم 1 ( بحيث حرف A يمثل الرقم 1 و B يمثل 2 ...إلخ) فعدد أحرف اللغة الانجليزية 26، بالتالي فالرقم 26 سيقابله الحرف Z ، لكن بما أن برنامج إكسل لا يحتوي على 26 عمود فقط بل يحتوي على أكثر من ذلك بكثير، فإن الرقم 27 سيمثل "AA" كما أن 28 سيمثل "AB" وهكذا.
ساعد بالإجابة
"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."
الإجابات (6)
def culc_me(x):
string = ""
while x > 0:
x, culc_him = divmod(x - 1, 26)
string = chr(65 + culc_him) + string
return string
##############
print(culc_me(1337)) # 1337 => AYK
function getNameFromNumber($num) {
$numeric = ($num - 1) % 26;
$letter = chr(65 + $numeric);
$num2 = intval(($num - 1) / 26);
if ($num2 > 0) {
return getNameFromNumber($num2) . $letter;
} else {
return $letter;
}
}
هذي بالبي اتش بي وتمت تجربتها
هذه بلغة Swift 4 مدعومة بالواجهات الرسومية
@IBAction func printlaction(_ sender: Any) {
let textN : Int = Int (number_textfield.text!)!
reslut.text = String (printEXCL_Letter(index: textN))
}
func printEXCL_Letter(index : Int) -> String {
let letters = ["a", "b", "c","d", "e", "f","g", "h", "i","j", "k", "l","m", "n", "o","p", "q", "r","s", "t", "u","v","w" ,"x", "y","z"]
var index = index;
index -= 1
let index_div = index / 26
if (index_div > 0){
return printEXCL_Letter(index: index_div) + letters[index % 26];
}
else {
return letters[index % 26]
}
}
جافا:
String fun(long i)
{
return i-- <= 0 ? "" : (char) ('A' + i % 26) + fun(i / 26);
}
باستخدام لغة جافا:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("Enter a number between 1 and 26: ");
int input = s.nextInt();
int count = 0;
char first = 'A';
while (input > 26){
input = input-26;
count++;
first = (char)(count+64);
}
char letter = (char)(input+64);
String fullLetters = Character.toString(letter);
if (count > 0)
fullLetters = Character.toString(first)+Character.toString(letter);
System.out.printf("The representation of the number entered is %s\n", fullLetters);
}
تجربة بدون إستخدام معامل باقي القسمة. في لغة الجافاسكربت
/* ECMASCRIPT 5 */
function columns_writer(num){
var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var calc = function (number,result){
if (result == null) result = [0];
if (result[result.length - 1] > 26){
result[result.length - 1] -= 26;
result[result.length] = 1;
}
if (number < 26){
var res = "";
for (i = 0; i < result.length; i++) {
res += map[result[i] - 1]
}
return res + map[number - 1];
}else{
result[result.length - 1] += 1;
return calc (number - 26, result)
}
}
document.write(calc(num) + "<br/>");
}
columns_writer(27);
columns_writer(332);
columns_writer(703);
columns_writer(23456);
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !