- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个转换整数 n
的 C 程序(0 到 1024 之间)通过贪心算法转换为罗马数字。我尝试通过以下方式做到这一点:
#include <stdio.h>
#include <string.h>
void convert(int);
int max(int[], int, int);
int main(){
//User Input
int n;
printf("Enter a digit between 0 and 1024: ");
scanf("%d", &n);
//Validation
while((n < 0)||(n > 1024)){
printf("That number is not between 0 and 1024. Please try again: ");
scanf("%d", &n);
}
//Output
printf("\nAs a Roman numeral, this was written: ");
if (n == 0) printf("nulla"); //Romans wrote 'nulla' for zero
else convert(n);
return 0;
}
void convert(int n){
//Case n = 0
if (n == 0) return;
else{
//Case n > 0
char* romanNums[] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
int arabicNums[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
int biggestNo = max(arabicNums, 12, n); //Biggest number in arabicNums[] smaller than n
printf("%s", romanNums[biggestNo]); //Print the biggest number as a Roman numeral
convert(n - biggestNo); //Convert the remaining
}
}
//This function determines the maximum number in arr[] smaller than n
int max(int arr[], int size, int n){
int i, max;
for(i = 0; i < size; i++){
if (n < arr[i]) max = i;
}
return max;
}
我尝试过调试和修改代码的各个方面,但它不起作用。如果有任何反馈,我将不胜感激。
<小时/>更新 我已设法修改我的程序,使其正确输出值 1、4、5 等,但复合值(即需要再次迭代 convert()
的值)保留导致“Romans.exe 没有响应”。这是新代码:
#include <stdio.h>
#include <string.h>
void convert(int);
int max(int[], int, int);
int main(){
//User Input
int n;
printf("Enter a digit between 0 and 1024: ");
scanf("%d", &n);
//Validation
while((n < 0)||(n > 1024)){
printf("That number is not between 0 and 1024. Please try again: ");
scanf("%d", &n);
}
//Output
printf("\nAs a Roman numeral, this was written: ");
if (n == 0) printf("nulla"); //Romans wrote 'nulla' for zero
else convert(n);
return 0;
}
void convert(int n){
//Case n = 0
if (n == 0) return;
else{
//Case n > 0
char* romanNums[] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
int arabicNums[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
int biggestNo = max(arabicNums, 13, n); //Biggest number in arabicNums[] smaller than n
printf("%s", romanNums[biggestNo]); //Print the biggest number as a Roman numeral
convert(n - arabicNums[biggestNo]); //Convert the remaining
}
}
//This function determines the maximum number in arr[] smaller than n
int max(int arr[], int size, int n){
int i, max;
for(i = size; i > 0; i--){
if (n <= arr[i]) max = i;
}
return max;
}
最佳答案
您的代码中有 2 个缺失点:
最大功能:
for(i = 0; i < size; i++){
if (n < arr[i]) max = i;
}
必须是:
for(i = 0; i <= size; i++){
if (n >= arr[i]) max = i; // Equal is require. Isn't it?
}
在您的主要功能上:函数转换:
convert(n - biggestNo); //Convert the remaining
必须是:
convert(n - arabicNums[biggestNo]);
biggestNo 是 seq 编号,而不是 div 的值
关于c - 贪心算法 - 罗马数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141693/
>>> import re >>> p = re.compile('.*&l=(.*)(&|$)') >>> p.search('foo&l=something here&bleh').group(1
最近有一道面试题如下:我们得到了一个单词列表,我们想要格式化它们以最大化回车符的数量,同时将每行的字母数量保持在一个范围内。 例如,我们希望每行的字母范围为 5 - 10(含),一种解决方案是: he
我正在使用二维数组来处理游戏中的对象。数组的维度就像笛卡尔网格上的坐标。当玩家选择一个点时,我想从数组中收集 N 个最近的网格单元,即使该点不是有效的数组索引。 例子:从 [0,0] 到 [10,10
我在 Hibernate 之上使用 Olingo 1.2。 我有一个返回 250 行的请求,每行以一对多关系链接到另一个表。 我执行 $expand 以获取子表中的所有数据,但是当我检查在数据库中执行
我正在 ANTLR4 中构建语法,但收到此警告 TL4.g4:224:12: greedy block ()* contains wildcard;非贪婪语法 ()*?可能是首选 这是它引用的代码行
In the default greedy mode, all data offered to targets are accepted, even if the other target doesn
假设我有 n 个盒子,每个盒子里面都有一些值 b[i] .我可以保证对一组框进行排序,使得 b[1] j; { min_{k=i}^j (c[k] + max(T(i, k-1)
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加
什么是 PHP 中的“贪心 token 解析”?我在 Codeigniter 指南中找到了这个: “除非需要解析变量,否则始终使用单引号字符串,并且在确实需要解析变量的情况下,使用大括号防止贪婪的标记
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 337 场周赛,你参加
我是一名优秀的程序员,十分优秀!