Poppet @ 2022-10-09 20:04:26
本人列举的数据为整数部分相同 ,小数部分从1至9的数据
问题出在第三个for循环
如下代码只能通过小数部分是奇数(除0)的数据
#include<stdio.h>
int main()
{
int b,c,d,e=0;
double a;
scanf("%lf",&a);
for(b=0;a>=100;a=a-100.0){
b++;
}
for(c=0;a>=10;a=a-10.0){
c++;
}
for(d=0;a>=1;a=a-1.0){
d++;
}
**for(e=0;a>=0.1;a=a-0.1){
e++;
}**
printf("%d.%d%d%d",e,d,c,b);
return 0;
}
如下代码可通过的数据和上述代码完全相反(除0)
#include<stdio.h>
int main()
{
int b,c,d,e=0;
double a;
scanf("%lf",&a);
for(b=0;a>=100;a=a-100.0){
b++;
}
for(c=0;a>=10;a=a-10.0){
c++;
}
for(d=0;a>=1;a=a-1.0){
d++;
}
**for(e=0;a>0.0;a=a-0.1){
e++;
}**
printf("%d.%d%d%d",e,d,c,b);
return 0;
}
小数部分为零的数据均可通过
调试过程中出现计算小数部分为0.1,实则计算机运算为0.0999999999999的现象 求助这种问题如何解决
求助 for循环无法通过这道题吗
by HeCao2008 @ 2022-10-09 20:06:59
作为误差来计算,我一般用与目标数据差
by HeCao2008 @ 2022-10-09 20:07:35
说真的,这道题你真的不打算直接模拟吗/哭笑
by ud2_ @ 2022-10-09 20:08:44
乘 10 之后当整数算。
by Poppet @ 2022-10-09 20:14:55
@ud2_ 谢谢
by Poppet @ 2022-10-09 20:17:27
@HeCao2008 谢谢你,但是我目前并不了解模拟是什么意思,搜索到的是模拟算法,我会去学习一下。
by HeCao2008 @ 2022-10-09 20:21:19
@Poppet 额,我直接告诉你吧
by Ayano_Kimishima @ 2022-10-09 20:25:31
#include<stdio.h>
#include<string.h>
using namespace std;
char a[1000000];
int main()
{
cin>>a;
int lena=strlen(a);
for(int i=lena-1;i>=0;i--)
{
cout<<a[i];
}
return 0;
}
字符串可以AC
by ud2_ @ 2022-10-09 20:44:22
@Poppet
我目前并不了解模拟是什么意思
这题的要求是“输入……翻转……并输出”,改写成 C++ 就是这样:
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string s;
std::cin >> s; // 输入
std::reverse(s.begin(), s.end()); // 翻转
std::cout << s << '\n'; // 输出
return 0;
}
像这样直接把题目要求改写成代码就是模拟。
by Sora1336 @ 2022-10-09 20:44:38
@Poppet 模拟不是算法
模拟是题目让你做什么就做什么
模拟退火是算法
by Poppet @ 2022-10-09 20:48:18
@Sora1336 谢谢