1189 Root

这篇博客讨论了如何优化代码来解决寻找方程(x+a)/(x+b)=c非负整数根的问题,其中a, b, c为非负整数。作者首先分析了原有代码的复杂性和超时问题,然后提出了新的解决方案,减少了分类判断并优化了计算过程,以提高效率和简洁性。

题目描述:

求方程 (x+a)/(x+b) = c的非负整数根,其中a,b,c都是非负整数。

输入:

第一行是一个整数K,表示样例的个数(K≤30000)。以后的K行每行为以一个样例,包含三个非负整数a,b,c (a,b,c ≤ 109)。

输出:

每行输出一个样例的结果。如果方程没有根,输出“None”,否则输出根的值,如果存在多个根,输出最小的那个。

最初代码如下:

#include<stdio.h>
int main()
{
	int K;
	int a, b, c, p;
	float t;
	scanf_s("%d", &K);
	while (K--) {	
		scanf_s("%d %d %d", &a, &b, &c);
		if (a == b) {
			if (b == 0) {
				if(c==1)printf("1\n");
				else printf("None\n");
			}
			else {
				if(c==1)printf("0\n");
				else printf("None\n");
			}
		}
		 else if (a > b) {
			if (b == 0 && c == 1)printf("None\n");
			else if (b == 0 && c != 1) {
				t = a / (c - 1);
				p = a % (c - 1);
				if (t >= 0 && p == 0)
					printf("%.f\n", t);
				else printf("None\n");
			}
			else {
				t = (a - b) / (c - 1) - b;
				p = (a - b) % (c - 1);
				if (t>= 0 &&  p== 0)
					printf("%.f\n", t);
				else printf("None\n");
			}
		}
		else {
			if (a == 0 && c == 1)printf("None\n");
			else if (a == 0 && c != 1) {
				t = b / (1 - c) - b;
				p = b % (1 - c);
				if (t >= 0 && p == 0)
					printf("%.f\n", t);
				else printf("None\n");
			}
			else {
				t = (a - b) / (c - 1) - b;
				p = (a - b) % (c - 1);
				if (t >= 0 && p == 0)
					printf("%.f\n", t);
				else printf("None\n");
			}
		}
	}
	return 0;
}

遇到困难:

1、分类的复杂性

2、代码过长,运行超时

3、压缩困难(后来也是把所有情况罗列尽量合并同类项)

新代码如下:

#include<stdio.h>
int main()
{
	int K;
	scanf_s("%d", &K);
	while (K--) {
		int a, b, c,p;
		float t;
		scanf_s("%d %d %d", &a, &b, &c);
		if (b != 0 && c != 1) {
			t = (float)((a - b) / (c - 1) - b);
			p = (a - b) % (c - 1);
			if (t >= 0 && p == 0)
				printf("%.f\n", t);
			else printf("None\n");
		}
		else if (c == 1) {
			if (a == b && b == 0)printf("1\n");
			else if (a == b && b != 0)printf("0\n");
			else printf("None\n");
		}
		else if (a == 0)printf("None\n");
		else {
			t = (float)(a / (c - 1));
			p = a % (c - 1);
			if (t >= 0 && p == 0)
				printf("%.f\n", t);
			else printf("None\n");
		}
	}
	return 0;
}

452 "buildCommands":[ 453 ], 454 "signCommands":[ 455 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/keymint_qti.mbn", 456 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/uefi_sec.mbn", 457 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/storsec.mbn", 458 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/ic5.mbn", 459 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/soter64.mbn", 460 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/evautil64.mbn", 461 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/featenabler.mbn", 462 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/sp_license.mbn", 463 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/widevine_qti.mbn", 464 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/rtic.mbn", 465 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/hdcpsrm.mbn", 466 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/winsecap.mbn", 467 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/ops.mbn", 468 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/opluseid_tms.mbn ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/oplus_signed", 469 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/tmsesesvc.mbn ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/oplus_signed", 470 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/32552B22-89FE-42B4-8A45-A0C4E2DB0326.mbn", 471 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/05B04A44-BF30-42DF-9E2F-B366B980ED19.mbn", 472 "${BUILD_SCRIPT_ROOT}/tool/osign/osignimg.sh ${TZAPP_ROOT}/qtee_tas/build/ms/bin/BAFAANAA/876BFD99-1189-4650-B260-FC7DD452D7BA.mbn" 473 ],
07-27
[root@slave2 /]# flink run-application -t yarn-application -Dparallelism.default=6 \ # 全局默认并行度SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/service/flink/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/service/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] ------------------------------------------------------------ The program finished with the following exception: java.net.URISyntaxException: Illegal character in path at index 0: at java.net.URI$Parser.fail(URI.java:2848) at java.net.URI$Parser.checkChars(URI.java:3021) at java.net.URI$Parser.parseHierarchical(URI.java:3105) at java.net.URI$Parser.parse(URI.java:3063) at java.net.URI.<init>(URI.java:588) at org.apache.flink.client.program.PackagedProgramUtils.resolveURI(PackagedProgramUtils.java:243) at org.apache.flink.client.cli.CliFrontend.runApplication(CliFrontend.java:200) at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1098) at org.apache.flink.client.cli.CliFrontend.lambda$mainInternal$9(CliFrontend.java:1189) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1899) at org.apache.flink.runtime.security.contexts.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41) at org.apache.flink.client.cli.CliFrontend.mainInternal(CliFrontend.java:1189) at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1157) [root@slave2 /]#
03-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值